HDU1013(简单数论)

本文介绍了一种利用9余数定理计算数根的方法,并提供了一个C语言实现的例子。通过此方法可以有效地解决HDU1013和POJ1519中的数字根问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

AC的c语言程序如下:

  1. /* HDU1013 POJ1519 Digital Roots */  
  2.   
  3. #include <stdio.h>  
  4.   
  5. int main(void)  
  6. {  
  7.     char in;  
  8.     int digitroot;  
  9.   
  10.     for(;;) {  
  11.         // 读入一个字符  
  12.         in = getchar();  
  13.   
  14.         // 判断结束条件  
  15.         if(in == '0')  
  16.             break;  
  17.   
  18.         // 计算数根  
  19.         digitroot = 0;  
  20.         while(in != '\n') {  
  21.             // 利用9余数定理和数论的余数定理进行计算  
  22.             digitroot += in - '0';  
  23.             digitroot = digitroot % 9;  
  24.   
  25.             in = getchar();  
  26.         }  
  27.   
  28.         // 输出结果  
  29.         printf("%d\n", (digitroot == 0) ? 9 : digitroot);  
  30.     }  
  31.   
  32.     return 0;  
  33. }  
/* 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值