• 九余数定理


    九余数定理概念:

    首先看九余数,即一个数对9取余的得到的数(某数%9)称为九余数。

    一个数的各个位数之和小于10的数称为这个数的九余数,(相加至小于10)。

    可以这么说一个数各个位数相加如果相加之后的结果小于10,那么这个结果就等于这个数模9(对9取余)。

    举个例子:比如215,各个位数相加值小于10:2+1+5=8<10,215%9=8,两者相等。

    还有一个应用:

    比如num=1000*a+100*b+10*c+d;

    可以写成num=999*a+99*b+9*c+(a+b+c+d);

    这样就意味着,如果(a+b+c+d)能够整除9,那么num也能够整除9。

    例题:

    1.hdu1013 Digital Roots  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1013

    直接应用定理,因为数比较大,只能用字符数组存储,然后让各个位相加%9即可。

    代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int main()
     6 {
     7     char a[10000];
     8     while(scanf("%s",&a)!=EOF)
     9     {
    10         getchar();
    11         if(a[0]=='0')
    12         break;
    13         int num=0;
    14         int len=strlen(a);
    15         for(int i=0;i<len;i++)
    16         {
    17             num+=a[i]-'0';
    18         }
    19         num=num%9;
    20         if(num==0)
    21         printf("9
    ");
    22         else
    23         {
    24             printf("%d
    ",num);
    25         }
    26     }
    27     return 0;
    28 }

    2.hdu1163 Eddy's digital Roots 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1163

    直接应用定理,各个数位的和等于这个数%9,比如44=(4*4%9)*4%9*4%9;

    代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int main()
     5 {
     6     int n;
     7     while(scanf("%d",&n),n)
     8     {
     9         int num=n;
    10         for(int i=1;i<n;i++)
    11         {
    12             num=n*num%9;
    13         }
    14         if(num==0)
    15         printf("9
    ");
    16         else
    17         printf("%d
    ",num);
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    复制excel表中的数据
    微信H5页面分享获取JS-SDK
    JS中let、var、const的区别
    JS-对象常用方法整理
    JS-数组常用方法整理
    掌握一门新技术/语言需要哪些步骤?
    浅谈JavaScript中的内存管理
    js对象模型2
    ts中的装饰器
    ts中的泛型
  • 原文地址:https://www.cnblogs.com/theshorekind/p/12641178.html
Copyright © 2020-2023  润新知