nyoj-105-九的余数

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 char a[1000001];
 6 int main()
 7 {
 8     int n;
 9     scanf("%d",&n);
10     getchar();
11     while(n--)
12     {
13         scanf("%s",a);
14         int len=strlen(a),i=0,sum=0;
15         while(i<len)
16         {
17             sum+=a[i]-'0';
18             i++;
19         }
20         printf("%d
",sum%9);
21     }
22     return 0;
23 }


自然数123456789101112……198919901991被9除,余数是几? 根据“一个数被9除的余数,等于它各位数字之和被9除的余数”这一“弃九法”的原理,考虑本题的答案,只须考虑: A=1+2+3+4+5+6+7+8+9+1+0+1+1+……+1+9+8+9+1+9+9+0+1+9+9+1被9的余数,并将它与如下的B作比较: B=1+2+3+4+5+6+7+8+9+10+11+……+1989+1990+1991。 由于B中的每个数,都对应A中若干个数字之和(即该数的各位数字之和,如B中的+10就与A中的+1+0对应;B中的1991就与A中的+1+9+9+1对应).而两者对9来说,余数都是一样的[如B中1991÷9=221……2;A中的(1+9+9+1)÷9=20÷9=2……2].也就是说,它们可以互相替换,被9除时,不会影响余数.根据这个道理:A÷9与B÷9的余数是相等的.而后者是前1991个自然数的和,可以每9个数作为一段,即: B=(1+2+3+……+8+9)+(10+11+……+18+19)+……+(1981+……+1989)+1990+1991。 而每一段都能被9整除,最后剩下两个数,它除以9余数为3.所以本题答案应是:余数是3。
原文地址:https://www.cnblogs.com/nylg-haozi/p/3182369.html