题目链接:
http://acm.hdu.edu.cn/webcontest/contest_login.php?cid=13669
1009
Problem Description
正整数的数字根是通过对整数的位数求和得到的。如果结果值是一个数字,则该数字是数字根。如果结果值包含两个或多个数字,则对这些数字求和并重复该过程。只要需要获得一个数字,就可以继续。
例如,考虑正整数24。将2和4相加得到6的值。因为6是一个数字,所以6是24的数字根。现在考虑正整数39。加上3和9得到12。由于12不是一个数字,因此必须重复该过程。加上1和2等于3,一个数字和39的数字根。
Input
输入文件将包含一个正整数列表,每行一个。输入的结尾将用一个0的整数值表示。
Output
对于输入中的每个整数,将其数字根输出到输出的另一行。
Sample Input
24
39
0
Sample Output
6
3
我没试出来测试点输入了多少位数,所以这道题只好用字符做了,求哪位大神分享一下测试点是什么。
这个是我用字符做出来的:
#include<stdio.h>
int main(){
char shu[1000];
int i;
while(scanf("%s",&shu)&&shu[0]!= '0'){//输入的不是0时结束,用字符串比较好计算各位数字的和
int sum=0;
for(i=0;shu[i];i++)sum+=shu[i]-'0';
printf("%d\n",sum%9==0?9:sum%9);
}
return 0;
}
总结:总感觉出题人就是故意让用字符做的,觉得好奇怪,当我用正常计算的时候输入100000000000时,计算机果然弹出来-2了,最开始的错误代码也发出来吧。
代码如下:
#include <stdio.h>
int main(){
double num;
int sum=0,copy=0;
while(1){
scanf("%lf",&num);
if(num==0) break;
copy=num;
out:
while(copy){
sum+=(copy%10);
copy/=10;
}
if(sum/10){
copy=sum;
sum=0;
goto out;
}
printf("%d\n",sum);
sum=0;
}
}