37.06% 1000ms 65536K
数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。
比如,对于 2424 来说,把 22 和 44 相加得到 66,由于 66 是一位数,因此 66 是 2424 的数根。再比如 3939,把 33 和 99 加起来得到 1212,由于 1212 不是一位数,因此还得把 11 和 22 加起来,最后得到 33,这是一个一位数,因此 33 是 3939 的数根。
输入格式
一个正整数(小于 10^{1000}10
1000
)。
输出格式
一个数字,即输入数字的数根。
输出时每行末尾的多余空格,不影响答案正确性
思路:10的1000次方用先一树根求和,就可以在int n的范围内了
#include<iostream>
using namespace std;
#include<string>
int main(){
string str1;
cin>>str1;
int m,n=0;
m=str1.size();
for(int i=0;i<m;i++){
n+=(str1[i]-'0');
}
int w=0;
while(n){
w+=n%10;
n/=10;
if(w>9&&n==0){
n=w;
w=0;
}
}
cout<<w<<endl;
return 0;
}