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。