题目描述
给定一个正整数 n,若 n 在十进制下的各位数字之和小于1010,则这个和是 n 的数根。否则,继续求这个和在十进制下的各位数字之和,直到结果小于1010为止,定义最后的结果为 n 的数根。
例如,999999 的数根为 99,因为 9+9+9=279+9+9=27,继续分解得 2+7=92+7=9。给定 n,请输出它的数根。注意,有一部分 n 非常大。
输入格式
单个整数,表示数字 n。
输出格式
单个整数:表示 n 的数根。
数据范围
- 对于 40% 的数据,1≤n<231;
- 对于 80% 的数据,1≤n<263;
- 对于 100% 的数据,1≤n<101000。
样例数据
输入:
99999999999
输出:
9
说明:
99=>18=>9
输入:
314159265358979323846264338328
输出:
7
题解:
本题关键点:大于10就循环切片求和,代码如下。
#include <iostream>
#include <string>
using namespace std;
int root(int x){
int y=0;
while(x>0){
y+=x%10;
x/=10;
}
return y;
}
int main(){
string n;
int ans;
cin>>n;
ans=0;
for(int i=0;i<n.length();i++){
ans+=n[i]-'0';
}
//循环切片
while(ans>9){
ans=root(ans);
}
cout<<ans<<endl;
return 0;
}