HDU1013

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU1013相关的知识,希望对你有一定的参考价值。

Digital Roots

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

问题描述
正整数的数字根是通过把整数的数字相加得到的。
如果结果值是个位数,那么这个数字就是数字根。
如果结果值包含两个或多个数字,那么这些数字可以相加,过程重复。
只要需要获得一个数字,就可以继续这样做。

例如,考虑正整数24。
加上2和4的值为6。
6是个位数,6是24的数字根。
现在考虑正整数39。
加上3和9的收益率是12。
因为12不是一个数字,这个过程必须重复。
加上1和2 yeilds 3,一个数字,也就是39的数字根。
 

输入
输入文件将包含一个正整数列表,每行一个。
输入的结束将用一个整数值表示为零。
 

输出
对于输入中的每个整数,将其数字根输出到输出的另一行。

 

Sample Input
24
39
0
 
Sample Output
6
3
 
一开始提交后显示WA,因为输入的数字可能超过的 int 的最大值,改为以字符串输入,修改后AC
 1 #include <stdio.h>
 2 int BOW(int n);
 3 int main()
 4 {
 5     int n;
 6     scanf("%d",&n);
 7     while(n!=0)
 8     {
 9         while(n/10!=0)
10         {
11             n=BOW(n);
12         }
13         printf("%d\n",n);
14         scanf("%d",&n);
15     }
16     return 0;
17 }
18 
19 int BOW(int n)
20 {
21     int sum=0;
22     while(n!=0)
23     {
24         sum+=n%10;
25         n/=10;
26     }
27     return sum;
28 }

 

修改后
 1 #include <stdio.h>
 2 #include <string.h>
 3 int BOW(int n);
 4 int main()
 5 {
 6     char digit[1001];
 7     int length,sum,i;
 8     scanf("%s",digit);
 9     length=strlen(digit);
10     while(digit[0]!=0)
11     {
12         sum=0;
13         for(i=0;i<length;i++)
14         {
15             sum+=digit[i]-0;
16         }
17         while(sum/10!=0)
18         {
19             sum=BOW(sum);
20         }
21         printf("%d\n",sum);
22         scanf("%s",digit);
23         length=strlen(digit);
24     }
25     return 0;
26 }
27 int BOW(int n)
28 {
29     int sum=0;
30     while(n!=0)
31     {
32         sum+=n%10;
33         n/=10;
34     }
35     return sum;
36 }

 

 

以上是关于HDU1013的主要内容,如果未能解决你的问题,请参考以下文章

hdu-1013 Digital Roots

HDU1013

hdu 1013 Digital Roots

解题报告:hdu1013 Digital Roots

HDU1013

hdu1013