UVA10922 【2 the 9s】

题目大意:有一个众所周知的结论,如果一个数\(N\)\(9\)的倍数,那么它各位数字上的和也是\(9\)的倍数,现在,基于递归测试,求递归深度。

其中,\(N \leq 10^{1000}\)

第一眼看到你可能会以为这题要用到高精度,其实仔细思考一下,我们这道题要用到的其实只有\(N\)各位数字上的和,所以我们采用字符串的形式读进来,然后累加各位数上的和,其实就相当于模拟了第一层递归。

然后直接用\(while\)来模拟递归过程,记录深度即可。

最后,此题的输出在\(UVA\)众多毒瘤输出中显得异常友好,所以算是一道不错的练习递归的题目虽然我没有写递归

code:

#include <iostream>
#include <cstdio>
#include <cstring>

using std::string;
string s;

int main() {
    while (std::cin >> s) {
        int sum = 0;
        if (s.length() == 0 || s[0] == '0') break;
        for (int i = 0; i < s.length(); i++)
            sum += s[i] - 48; // 0的ASCLL码即48
        int dep = 0;
        bool flag = false; // 记录能否被9整除
        if (sum % 9 == 0)
            dep = 1, flag = true; // 一个小细节:若第一层能被9整除,那么深度应直接记录为1
        if (!flag) {
            std::cout << s << " is not a multiple of 9." << '\n';
            continue;
        }
        else {
            while (sum % 9 == 0 && sum > 9) {
                int temp = sum;
                sum = 0;
                while (temp) {
                    sum += temp % 10;
                    temp /= 10;
                }
                ++dep;
            } // 模拟递归过程
            std::cout << s << " is a multiple of 9 and has 9-degree " << dep << "." << '\n';
        }
    }
    return 0;
}

完结撒花(✪ω✪)

posted @ 2019-10-25 14:56  Hydrogen_Helium  阅读(118)  评论(0编辑  收藏  举报