题解 | #The Biggest Problem(递归)#
The Biggest Water Problem
https://www.nowcoder.com/practice/435aa556e093463891f6da7d322140a4
// #include <stdio.h>
// int GetAllBitsNum(long long* n);
// int main() {
// long long n;
// while (scanf("%lld", &n) != EOF) {
// int sum = GetAllBitsNum(&n);
// printf("%d\n", sum);
// }
// return 0;
// }
// int GetAllBitsNum(long long* n) {
// int res;
// long long tmp;
// // 循环至少要执行一次
// do {
// // res值归0,重新开始计算
// res = 0;
// while (*n > 0) {
// tmp = *n % 10;
// res += tmp;
// *n /= 10;
// }
// if (res >= 10) {
// // 上述循环过后*n的值已为0,这里用res给*n重新赋值
// *n = res;
// }
// } while (res >= 10);
// return res;
// }
// 递归思想:函数的自我调用,同一个函数输出(return)作为同一个函数计算的输入(自我调用)
#include <stdio.h>
int Rec(int x) {
// 递归退出条件,需放在一般情况前,不然递归一直持续,直到栈空间爆炸ヽ(*。>Д<)o゜
// x为0时,开始“归”
if (x == 0) return 0;
// 一般情况
// x不为0时,开始“递”
return (x % 10) + Rec(x / 10);
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
// 调用递归函数
do {
n = Rec(n);
} while (n >= 10);
printf("%d\n", n);
}
return 0;
}