[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 && 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是多么爽的一件事情啊,是不?还是做的题目太少,没经验,没感觉。
#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 && 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是多么爽的一件事情啊,是不?还是做的题目太少,没经验,没感觉。
我没有什么雄心壮志,我只想给自己和关心自己的家人和朋友一个交代,仅此而已。


浙公网安备 33010602011771号