[解题报告]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 根。
 
输入:
输入的文件将包含正整数,每行一个的列表。输入的结束将由零的整数值表示。
 
输出:
对于输入中的每个整数,输出其数字根在输出中的单独一行上。

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;
}

 

原文地址:https://www.cnblogs.com/qisong178878915/p/2965886.html