題面:
東東對數字很敏感,他定義了一個數的數根,數根即把一個數的各個位上的數字加起來可以得到。如果得到的數是一位數,那麼這個數就是數根。如果結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到得到是一位數爲止。
比如,對於 來說,把 和 相加得到 ,由於 是一位數,因此 是 的數根。再比如 ,把 和 加起來得到 ,由於 不是一位數,因此還得把 和 加起來,最後得到 ,這是一個一位數,因此 是 的數根。
輸入格式
一個正整數(小於 )。
輸出格式
一個數字,即輸入數字的數根。
sample input:
24
sample output:
6
思路:
- 求數根的題之前做過,然後歡樂的寫遞歸,歡樂的遞交,然後就WA了
- 本題需要注意的重點是輸入的正整數的範圍,這個範圍是超過long long 範圍的,但是他的位數的範圍是在int的範圍內的(1的後面跟1000個0,一共1001位)
- 所以使用字符串將長數字讀入,然後按位數將每一位的數加起來求和,再將和進行求數根的操作
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
using namespace std;
int shu(long long n)
{
long long sum=0;
while(n>0)
{
sum+=n%10;
n/=10;
}
if(sum>=10)
sum=shu(sum);
else return sum;
}
int main()
{
long long len=0;
long long ans=0,n=0;
//scanf("%lld",&n);
string s;
cin>>s;
len=s.length();
//cout<<len;
for(long long i=0;i<len;i++)
{
n+=s[i]-'0';
}
//cout<<n<<endl;
ans=shu(n);
cout<<ans;
return 0;
}