[解题报告]1013Digital Roots
题目大意
题目原文:http://acm.hdu.edu.cn/showproblem.php?pid=1013
背景:
问题描述:
一个正整数的数字根发现总结整数的位数。如果结果值为一位数,那么这个数字就是数字根。如果得出的值包含两个或多个数字,这些数字进行求和,并重复该过程。这被续只要有必要以获取单个数字。
例如,请考虑 24 正整数。2 和 4 中添加生成一个值 6。因为 6 是 24 的一位数,6 是 24 的数字根。现在考虑 39 正整数。添加 3 和 9 收益率 12。因为 12 不是一个单一的数字,必须重复这一进程。添加 1 和 2 yeilds 3、 单个数字和数字的 39 根。
例如,请考虑 24 正整数。2 和 4 中添加生成一个值 6。因为 6 是 24 的一位数,6 是 24 的数字根。现在考虑 39 正整数。添加 3 和 9 收益率 12。因为 12 不是一个单一的数字,必须重复这一进程。添加 1 和 2 yeilds 3、 单个数字和数字的 39 根。
输入:
输入的文件将包含正整数,每行一个的列表。输入的结束将由零的整数值表示。
输出:
对于输入中的每个整数,输出其数字根在输出中的单独一行上。
Sample Input
24
39
0
Sample Output
6
3
算法:
一看到这道题目我一开始就直接用int来输入这个数,所以我WA了一次。后面我想到这个数可能很大,没有办法用整型表示,所以我就改成了字符型数组,最后AC了,也是一个水题,错了一次很不应该。
代码:
这里附上我的代码,你可以去这里提交你的代码验证你的代码是否正确。
#include<stdio.h> int main(void) { int a,sum=0,num,i=0; char num0[100000]; while(scanf("%s",num0)!=EOF) { i=0; sum=0; a=0; while(num0[i]!='\0') { sum=sum+num0[i]-'0'; i++; } if(sum==0)break; if(sum<10) printf("%d\n",sum); else { while(sum>=10) { num=sum; sum=0; while(num>=10) { a=num%10; num=num/10; sum=sum+a; if(num<10) sum=sum+num; } num=sum; } printf("%d\n",sum); } } return 0; }