题目描述
给定一个正整数n,若n 在十进制下的各位数字之和是小于1010,则这个和是n 的数根。否则,继续求这个和在十进制下的各位数字之和,直到结果小于1010为止,定义最后的结果为n 的数根。
例如,999999 的数根为 99,因为 9+9+9=279+9+9=27,继续分解得 2+7=92+7=9。给定 n,请输出它的数根。注意,有一部分 n 非常大。
输入格式
单个整数,表示输入的数字 n。
输出格式
单个整数:表示 �n 的 数根。
样例
输入数据#1
123
输出数据#1
6
输入数据#2
999
输出数据#2
9
输入数据#3
314159265358979323846264338328
输出数据#3
7
数据范围
- 对于 40%40% 的测试数据满足:1≤n<2311≤n<231。
- 对于 80%80% 的测试数据满足:1≤n<2631≤n<263。
- 对于 100%100% 的测试数据满足:1≤n<1010001≤n<101000。
//***wuhaotian***//
#include<bits/stdc++.h>
using namespace std;
int shugen(int n)
{
int s=0;
while(n!=0)
{
s=s+n%10;
n=n/10;
}
return s;
}
int main()
{
string n;
int s=0;
cin>>n;
for(int i=0;i<n.size();i++)
{
s=s+n[i]-'0';
}
if(s<10)
{
cout<<s;
return 0;
}
while(s>=10)
{
s=shugen(s);
if(s<10)
{
cout<<s;return 0;
}
}
}
《数根》视频讲解:数根_哔哩哔哩_bilibili
/*****author:ssxyz*****/
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long ans=0;
string s;
cin>>s;
for(int i=0;i<s.size();i++)//数据范围很大, 用字符串来存储
{
ans+=s[i]-'0';
}
//求完和之后就会属于long long范围以内的了,接下来用正常方式处理
while(ans>=10)
{
int t=ans;
ans=0;
while(t)
{
ans+=t%10;
t/=10;
}
}
cout<<ans;
}