HDU 1013 Digital Roots

http://acm.hdu.edu.cn/showproblem.php?pid=1013

题目大意

给一个数,若这个数的各个位数上的和为一位数字,则输出结果。否则继续计算上一结果的各个位数上的和,知道结果为一位数字,进行输出

Sample Input

20

39

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;
}
/* bottom:40px 距浏览器底部距离 right:40px 距浏览器右边距离 */