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 != '\n') {
            // step1 计算各位数字之和
            digitroot += in - '0';

            // step2 每个10都变为1
            digitroot = digitroot / 10 + digitroot % 10;

            in = getchar();
        }

        // 输出结果
        printf("%d\n", digitroot);
    }

    return 0;
}


posted on 2016-07-15 19:19  海岛Blog  阅读(116)  评论(0编辑  收藏  举报

导航