同題:UVa 11332 – Summing Digits
對於所有正整數 N,我們定義一函數 f(N) 為 N 的每一個十進位數字的總和,若再把 f(N) 代入函數中可得最到很多階層的函式,最後得到僅有一位數字的值,並定義該值為 g(N)。
當 N = 1234567 時,
f(N) = 1 + 2 + 3 + 4 + 5 + 6 + 7 = 47
f(f(N) = 4 + 7 = 11
f(f(f(N))) = 1 + 1 = 2
所以 g(1234567) 為2。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入的每一行會有一個正整數 N,其值最大到 2*109,你必須輸出 g(N)。輸入是以 0 值做為結束,該值不需要輸出。 | 如輸入所述。 |
2 11 47 1234567892 0 | 2 2 2 2 |
解題思路
使用函式的方式來處理每一個測資,收資料的時候可以使用字串來收資料並判斷字串的長度,進行計算時再把字串轉換成整數。
範例程式碼-ZeroJudge C813: Summing Digits
#include <iostream>
using namespace std;
int go (string str)
{
if (str.length() == 1) return int(str[0] - '0');
else
{
int sum = 0;
for (int i = 0; i<str.length(); i++)
{
sum += int(str[i] - '0');
}
string tmp = to_string(sum);
if (tmp.length() == 1) return int(tmp[0] - '0');
else return go(tmp);
}
}
int main() {
string str;
while (cin >> str)
{
if (str == "0") break;
else
{
cout << go(str) << endl;
}
}
}
//ZeroJudge C813
//Dr. SeanXD