ZeroJudge C813: Summing Digits

同題: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

發佈留言