码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1013 Digital Roots(解法二)

时间:2016-07-15 21:51:52      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

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

数根是指整数的各个位的数字之和。如果其和为1位整数,则为结果;如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止。

这个问题的大陷阱是,没有指出整数是多少位的。即使使用unsignde long long类型,也可能会溢出的。所以,需要先用字符串来处理。

之前的版本(参见:HDU1013 Digital Roots)不是最佳解,所以重新写了这个程序。一边输入一边处理,才是最佳的选择,可以省去存储空间。

其他的所有解释都在程序中了。

AC的C语言程序如下:

/* HDU1013 Digital Roots */

#include <stdio.h>

int main(void)
{
    char in;
    int digiroot;

    for(;;) {
        // 读入一个字符
        in = getchar();

        // 判断结束条件
        if(in == '0')
            break;

        // 计算数根
        digiroot = 0;
        while(in != '\n') {
            // step1 计算各位数字之和
            digiroot += in - '0';

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

            in = getchar();
        }

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

    return 0;
}


HDU1013 Digital Roots(解法二)

标签:

原文地址:http://blog.csdn.net/tigerisland45/article/details/51915714

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!