[HDOJ]1013. Digital Roots

      看了一遍题目,认为是简单题目,写了如下代码,结果WA.
#include <iostream>
using namespace std;
int sum_n(int n)
{
    
int sum = 0;
    
while(n)
    
{
        sum 
= sum + n%10;
        n 
= n/10;
    }

    
return sum;
}

int digital_root(int n)
{
    
if(n/10 == 0)
        
return n;
    
else
        
return digital_root(sum_n(n));
}

int main()
{
    
int n;
    
while(cin>>&& n != 0)
        cout
<<digital_root(n)<<endl;
    
return 0;
}

      不得不回头重新仔细看题目,恍然大悟,跟1002性质差不多,忽略了机器上32bit所能表示的整数的范围,应该用字符串来模拟才对,修改后提交AC。
#include <iostream>
#include 
<string>
using namespace std;
int sum_n(int n)
{
    
int sum = 0;
    
while(n)
    
{
        sum 
= sum + n%10;
        n 
= n/10;
    }

    
return sum;
}

int digital_root(int n)
{
    
if(n/10 == 0)
        
return n;
    
else
        
return digital_root(sum_n(n));
}

int main()
{
    
string str;
    
while(cin>>str && str != "0")
    
{
        
int sum = 0;
        
for(string::size_type i = 0;i < str.size();++i)
            sum 
= sum + str[i] - '0';
        cout
<<digital_root(sum)<<endl;
    }

    
return 0;
}

      后记:哎,简单题目争取考虑多一些,一次性AC是多么爽的一件事情啊,是不?还是做的题目太少,没经验,没感觉。

posted on 2009-04-19 11:00  笔记  阅读(694)  评论(0编辑  收藏  举报

导航