• hdu1013Digital Roots



    /*

    要说明的是,这道题不能用int 类型,要用字符类型。

    */

    #include<stdio.h>
    #include<string.h>
    char num[110];
    int main()
    {
       while(~scanf("%s",num) && num[0]!='0')
       {
           int len = strlen(num);
           int sum = 0;
           int i;
           for( i= 0; i < len; i++)
           {
               sum += num[i] - '0';
           }
     
           while(sum > 9)
           {
               int a = 0;
               while(sum > 0)
               {
                   a += sum % 10;
                   sum /= 10;
               }
                   sum = a;
           }
     
           printf("%d
    ",sum);
       }
       return 0;
    }



     才发现还有另一种做法:

    n=0 1 2 3 4 5 6 7 8 9 10 11 12 13 ......... 100 101 102 103 ....
    roots=0 1 2 3 4 5 6 7 8 9 1 2 3 4 .......1 2 3 4....
    原来是以1.....9为循环节的。想想也是,每次增加1,那么层层迭代下来,最终当ans<10的时候也是每次增加了1。如此,可以归纳出
    roots=(n-1)%9+1

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int i,n,tmp;
        char a[1003];
        while (scanf("%s",&a)&&a[0]!='0')
        {
            n=0;
            for (i=0;i<strlen(a); i++)
            {
                n+=a[i]-48;
            }
            printf("%d
    ",(n-1)%9+1);
        }
        return 0;
    }

     

     

     

     

     

  • 相关阅读:
    日月
    硕人
    式微
    芣苡
    樛木
    兔罝
    绿衣
    汉广
    小星
    惠子相梁
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094156.html
Copyright © 2020-2023  润新知