百練OJ2764 數根(感覺智商被完爆了)

2021-06-20 05:31:52 字數 1271 閱讀 9471

總時間限制: 

1000ms 

記憶體限制: 

65536kb

描述

數根可以通過把乙個數的各個位上的數字加起來得到。如果得到的數是一位數,那麼這個數就是數根。如果結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到得到是一位數為止。

比如,對於24來說,把2和4相加得到6,由於6是一位數,因此6是24的數根。再比如39,把3和9加起來得到12,由於12不是一位數,因此還得把1和2加起來,最後得到3,這是乙個一位數,因此3是39的數根。

輸入輸入包括一些正整數(小於10

1000),每個一行。輸入的最後一行是0,表示輸入的結束,這一行不用處理。

輸出對每個正整數,輸出它的數根。每個結果佔據一行。

樣例輸入

24

390

樣例輸出

6

3

**翻譯自 greater new york 2000 的試題

思路還是比較簡單的:

1.用str來儲存字串,因為輸入的數不會超過10的1000次方,所以定義乙個長度為1001的str字元陣列即可。

2.用sum來計算str每個位上數字累加之和(因為是1000個個位數的和,所以不必考慮sum的值是否會溢位的問題),若sum還大於10的話,就把int型的sum的資料轉化成字串,然後拷貝給str,再迴圈。這裡要用到itoa()函式,在vc++6.0的標頭檔案中有定義。

所以自然會產生如下**:

#include#include#includeint main()

printf("%d\n",sum);

} return 0;

}

經過我的驗證以上**應該是正確的,我還測試了很多組資料結果都是對的。但是在百練oj上就是compile error。原因應該是這個oj自帶的g++中不包含itoa()函式,所以編譯不過。類似的情況也發生在之前一道題要用到strrev()函式的時候。然後我就得自己寫itoa()函式了啊,可是真的很麻煩啊,然後上網搜了一下,發現一位牛人的**,經過我的改編如下:

#include#includeint main()

return 0;

}

核心就在於這個程式只需要算一次sum , 然後(sum-1)%9 +1就是最後所求的結果了-_-!!!!!

我表示很不理解啊,不過確實ac了。。。。。

不知道有沒有哪位大牛來給我解答一下

百練oj2816 紅與黑

總時間限制 1000ms 記憶體限制 65536kb 描述 有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入包括多個資料集合。每個資料集合的第一行是兩個整數w和h,分別表示x方向和...

百練OJ 4150 上機

總時間限制 1000ms 記憶體限制 65536kb 描述 又到週末了,同學們陸陸續續開開心心的來到機房上機。jbr也不例外,但是他到的有點晚,發現有些機位上已經有同學正在做題,有些機位還空著。細心的jbr發現,一位同學來到機房,坐在機位i上,如果他的左右兩邊都空著,他將獲得能力值a i 如果當他坐...

百練2706 麥森數

此題的關鍵是計算2 p,採用移位的方式不斷計算p的二進位制表示,進而通過乘以對應的2的次冪得到結果。此外,此題用1個陣列元素表示十進位制的4位數字,即採用萬進製 10000進製 提高高精度計算的速度。主要是實現高精度乘運算。此題也讓我發現的我的codeblocks 16.01編譯環境有問題orz。i...