HDU1013 Digital Roots(解法二)

问题链接: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;
}
时间: 2024-10-23 15:40:59

HDU1013 Digital Roots(解法二)的相关文章

解题报告:hdu1013 Digital Roots

2017-09-07 22:02:01 writer:pprp 简单的水题,但是需要对最初的部分进行处理,防止溢出 /* @theme: hdu 1013 Digital roots @writer:pprp @begin:21:52 @end:21:59 @error:虽然是水题,但是还是需要对最初的处理,如果过大超过了int范围,就出错了 @date:2017/9/7 */ #include <bits/stdc++.h> using namespace std; int main() {

HDU1013 Digital Roots 模拟//数学题

Problem Description: The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits

hdu1013 Digital Roots

思路: 九余数定理. http://blog.csdn.net/asd7f7/article/details/53994666 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 typedef long long ll; 6 7 char a[1005]; 8 9 int main() 10 { 11 int n; 12 while (t

HDU1163 Eddy&#39;s digital Roots

问题链接:HDU1013 Digital Roots.入门练习题,用C语言编写程序. 这个问题是对于输入的n,计算n^n的数根. 先看一下以下式子: 因为:(10*a+b)*(10*a+b)=100*a*a+10*2*a*b+b*b 所以右边式子的数根(中间结果,也是左边式子的数根)为:a*a+2*a*b+b*b=(a+b)*(a+b) 故:对于两位数n,n*n的数根=n的树根×n的树根. 同理可以推出,对于任意位数的n,也满足:n*n的数根=n的树根×n的树根. 程序中,实现一个计算整数数根的

HDU1013 POJ1519 Digital Roots(解法三)

该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的余数,若余数为0则结果为9. 问题链接:HDU1013 POJ1519 Digital Roots.入门练习题,用C语言编写程序. 问题简述:输入若干正整数,求其数根,直到输入为0为止. 问题分析:数根是指整数的各个位的数字之和.如果其和为1位整数,则为结果:如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止.这个问题的大陷阱是,没有指出整数是多少位的.即使使用unsignde long long类型,也可能会

HDU 1013.Digital Roots【模拟或数论】【8月16】

Digital Roots Problem Description The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits,

HDOJ 1163 Eddy&#39;s digital Roots(简单数论)

[思路]:http://blog.csdn.net/iamskying/article/details/4738838 求解思路: 现在分析一个问题,假设将十位数为a,个位数为b的一个整数表示为ab,则推导得 ab*ab = (a*10+b)*(a*10+b) = 100*a*a+10*2*a*b+b*b 根据上式可得:root(ab*ab) = a*a+2*a*b+b*b = (a+b)*(a+b);[公式一] 同理也可证得:root(ab*ab*ab) = (a+b)*(a+b)*(a+b)

题目1124:Digital Roots (方法超简单)

题目1124:Digital Roots 学到的新知识 求一个数各个的和可以把其%9就行,例如13%9=4 11%9=2:123%9=6: 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3819 解决:1335 题目描述: The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then

HDU 1163 Eddy&#39;s digital Roots

Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5783    Accepted Submission(s): 3180 Problem Description The digital root of a positive integer is found by summing the digit