ZeroJudge C813: Summing Digits

題目敘述

本題採EOF方式收資料,每筆資料有一個正整數N,當N為0時停止收資料。要求輸出f(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

所以答案為2。


範例輸入 #1

2

11

47

1234567892

0

範例輸出 #1

2

2

2

2


解題思路

使用函式的方式來處理每一個測資,收資料的時候可以使用字串來收資料並判斷字串的長度,進行計算時再把字串轉換成整數。

解題程式碼如下 (僅供參考):

#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 M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天