九的余数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。
-
输入
-
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。
输出
- 输出n整除九之后的余数,每次输出占一行。 样例输入
-
3 4 5 465456541
样例输出
-
4 5 4
来源
- [苗栋栋]原创 上传者
心得:首先,自然数n它的位数小于等于一百万,将这个数用int 型储存,内存自然是小了。用字符串表示既能储存下来,又能节省空间。刚开始我直接用字符串输入,出现了错误,尚未找出(下面我会附出,若有大神知道哪错了,望指点哦),后来改换用字符串数组了。
第二个问题便是,如何求9的余数,此处用到一个结论:一个数除以9的余数等于这个数所有位上的数的和除以9的余数。如12345%9=6,(1+2+3+4+5)%9=6。
代码<C语言>
错误代码:
#include<stdio.h>
int main()
{
int m,sum=0;
char B;
scanf("%d",&m);//输入测试次数
getchar();
while(m--)
{
sum=0;
while((B=getchar())!='\n')
{
sum+=B-48;//在ascll码中,字符'0'对应int型的48
}
printf("%d\n",sum%9);
}
return 0;
}
正确代码
#include <stdio.h>
#include <string.h>
#define N 1000010
int main()
{
int n,sum;
scanf("%d", &n);
while(n --){
char a[N];//将自然数以字符串的形式储存,节约空间
sum=0;
scanf("%s", a);
int length = strlen(a);//字符串长度,不包括'\0'
for(int i = 0; i < length; i ++){
a[i] -= '0';相当于a[i] -= 48;
sum+=a[i];
}
printf("%d\n", sum%9);
}
return 0;
}
-
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
AC情况