热烈庆祝本人于2013.1.22正式开张,路过的都顶啊!
本题是hdu1013 Digital Roots .原题地址http://acm.hdu.edu.cn/showproblem.php?pid=1013 .题意简单明了的一道水题,就是让你把输入的数每一位数字相加,得数再做如此操作,直到只剩一位时输出结果.
测试样例可能会很大,整形必然存不下,所以考虑怎么扩长. _int64容易出错,long long提交不过,所以还是用常规方法 字符串.事实证明:再大的数,经过一次处理,也会变到十亿(整形存得下)之内.
以下为提交的原代码.
#include<stdio.h>
#include<string.h>
int main()
{
int n,sum;
while(1)
{
char a[20000];
scanf("%s",a);
if(a[0]=='0')break;
sum=0;
n=strlen(a);
for(int i=0;i<n;i++) //首次处理,期望回十亿之内
{
sum+=(a[i]-'0'); //计数
//printf("%d\t",sum);
}
//printf("%s\n",a);
/*if(sum/10)
{
sum=sum/10+sum%10; 方法实用性不强
if(sum/10)sum=sum/10+sum%10;
}*/
//if(sum/100)sum=sum/100+sum%10+sum-sum/100*100-sum%10;
//else if(sum/10)sum=sum/10+sum%10;
sum%=9;
if(sum==0)printf("9\n");
else printf("%d\n",sum);
}
return 0;
}
PS:注释部分除说明外还有调错输出/错误方法;
那个实用性不强的方法主要是没考虑到测试样例的大小.三位之内还是能出结果的.