码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1013

时间:2017-11-10 00:22:09      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:turn   output   问题   过程   log   clu   div   roo   input   

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

标签:turn   output   问题   过程   log   clu   div   roo   input   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!