HDU1013 POJ1519 Digital Roots(解法三)

来源:互联网 发布:斗牛快速算法 编辑:程序博客网 时间:2024/05/16 10:00

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

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

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

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

之前的版本参见:HDU1013 POJ1519 Digital Roots和HDU1013 POJ1519 Digital Roots(解法二)

程序说明:本程序是利用9余数定理和数论的余数定理进行计算。

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') {            // 利用9余数定理和数论的余数定理进行计算            digitroot += in - '0';            digitroot = digitroot % 9;            in = getchar();        }        // 输出结果        printf("%d\n", (digitroot == 0) ? 9 : digitroot);    }    return 0;}


1 0
原创粉丝点击