首页 > 其他 > 详细

HDU1013

时间:2017-11-09 23:19:56      阅读:243      评论:0      收藏:0      [点我收藏+]

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

原文:http://www.cnblogs.com/BOW1203/p/7811549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!