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

九余数定理

时间:2020-04-06 11:59:56      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:链接   mes   iostream   include   题目   有一个   结果   turn   printf   

九余数定理概念:

首先看九余数,即一个数对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\n");
22         else
23         {
24             printf("%d\n",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\n");
16         else
17         printf("%d\n",num);
18     }
19     return 0;
20 }

 

九余数定理

标签:链接   mes   iostream   include   题目   有一个   结果   turn   printf   

原文地址:https://www.cnblogs.com/theshorekind/p/12641178.html

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