HDU1013 Digital Roots

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

#include<iostream>
#include "cstdio"
using namespace std;

int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        int sum=0;
        while(true){
           while(n>0){
                sum+=n%10;
                n/=10;
            }
            if(sum>10)
            {
                 n=sum;sum=0;
            }
            else{
                break;
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}

就是wrong就是wrong.....是何原因?是何原因??

感谢http://blog.csdn.net/rongyongfeikai2/article/details/7588273让我快速意识到,大数陷阱

#include "iostream"
#include "cstdio"
#include "string"
using namespace std;

int main()
{
    string str;
    while(cin>>str&&str!="0")
    {
        int len=str.length();
        int num=0;
        for(int i=0;i<len;i++){
            num+=str[i]-'0';
            if(num>9){num=num/10+num%10;}
        }
        cout<<num<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/kimsimple/p/6517449.html