数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。
比如,对于 2424 来说,把 22 和 44 相加得到 66,由于 66 是一位数,因此 66 是 2424 的数根。再比如 3939,把 33 和 99 加起来得到 1212,由于 1212 不是一位数,因此还得把 11 和 22 加起来,最后得到 33,这是一个一位数,因此 33 是 3939 的数根。
输入格式
一个正整数(小于 10^{1000}10
1000
)。
输出格式
一个数字,即输入数字的数根。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
24
样例输出复制
6
本题乍一看很简单,但是已看数据范围很恶心,尝试用long long ,只能过部分case,所以选择了大整数结构体,这样既可通过
//@authir:hairu,wu
//@from:ahut
#include<iostream>
using namespace std;
struct num{
int a[10000];
int len;
num(){
len=0;
}
};
int f(num x){
if(x.len==1) return x.a[0];
else{
num t;
int tmp;
for(int i=0;i<x.len;i++){
tmp+=x.a[i];
}
while(tmp!=0){
int r=tmp%10;
tmp=tmp/10;
t.a[t.len++]=r;
}
return f(t);
}
}
num trans(string str){
num a;
int len=str.length();
for(int i=len-1;i>=0;i--){
a.a[a.len++]=str[i]-'0';
}
return a;
}
int main(){
string str;
cin>> str;
num a=trans(str);
cout<<f(a)<<endl;
return 0;
}