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的主要内容,如果未能解决你的问题,请参考以下文章