zoukankan      html  css  js  c++  java
  • HDU1013 POJ1519 Digital Roots(解法二)

    该问题的最佳解法是利用数论的9余数定理来计算数根。一个数的数根等于该数的9的余数,若余数为0则结果为9。

    问题链接HDU1013 POJ1519 Digital Roots入门练习题,用C语言编写程序。

    问题简述:输入若干正整数,求其数根,直到输入为0为止。

    问题分析:数根是指整数的各个位的数字之和。如果其和为1位整数,则为结果;如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止。这个问题的大陷阱是,没有指出整数是多少位的。即使使用unsignde long long类型,也可能会溢出的。所以,需要按字符串来处理。

    程序说明:(略)。

    之前的版本(参见:HDU1013 POJ1519 Digital Roots)先把数读到数据缓冲区再处理,所以重新写了这个程序。一边输入一边处理更好,可以省去存储空间。

    另外一个版本参见:HDU1013 POJ1519 Digital Roots(解法三)

    AC的C语言程序如下:

    /* HDU1013 POJ1519 Digital Roots */
    
    #include <stdio.h>
    
    int main(void)
    {
        char in;
        int digitroot;
    
        for(;;) {
            // 读入一个字符
            in = getchar();
    
            // 判断结束条件
            if(in == '0')
                break;
    
            // 计算数根
            digitroot = 0;
            while(in != '
    ') {
                // step1 计算各位数字之和
                digitroot += in - '0';
    
                // step2 每个10都变为1
                digitroot = digitroot / 10 + digitroot % 10;
    
                in = getchar();
            }
    
            // 输出结果
            printf("%d
    ", digitroot);
        }
    
        return 0;
    }


  • 相关阅读:
    Grakn Forces 2020 I. Bitwise Magic
    October Challenge 2020 Division 1
    杂题
    杂题
    杂题
    hdu 6868
    Codeforces Round #673 (Div. 1)
    杂题
    2019 ICPC World Finals K
    【CSP2019】括号树 题解(递推+链表)
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564624.html
Copyright © 2011-2022 走看看