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;
}
完结撒花(✪ω✪)