http://acm.hdu.edu.cn/showproblem.php?pid=1013
题目大意
给一个数,若这个数的各个位数上的和为一位数字,则输出结果。否则继续计算上一结果的各个位数上的和,知道结果为一位数字,进行输出
Sample Input
20
0
Sample Output
6
3
方法与总结
- 注意输入的数字很大需要字符串读入
- 递归思想
- 九余数定理
- 也可以归纳出
roots=(n-1)%9+1
直接计算
代码
#include<iostream>
#include<string>
using namespace std;
int solve(int num)
{
if(num<=9)
return num;
else
{
int a=0;
while(num>0)
{
a+=num%10;
num/=10;
}
num=a;
solve(num);
}
}
int main()
{
string str;
int s;
while(getline(cin,str) && str[0]!='0')
{
s=0;
for(int i=0;i<str.length();i++)
{
s+=str[i]-'0';
}
cout<<solve(s)<<endl;
}
return 0;
}
代入公式更简单
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
int s;
while(getline(cin,str) && str[0]!='0')
{
s=0;
for(int i=0;i<str.length();i++)
{
s+=str[i]-'0';
}
s=(s-1)%9+1;
cout<<s<<endl;
}
return 0;
}