九的余数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。
-
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。
输出
- 输出n整除九之后的余数,每次输出占一行。 样例输入
-
3 4 5 465456541
样例输出
-
4 5 4
-
输入
#include<stdio.h>
#include<string.h>
char str[1000000];
int main()
{
int N,i,j,ans,n;
scanf("%d",&N);
while(N--)
{
scanf("%s",str);
n=strlen(str);
ans=0;
for(i=0;i<n;i++)
{
ans=(ans*10+str[i]-'0')%9;
}
printf("%d\n",ans);
}
return 0;
}
/*大整数取余的算法
描述:输入正整数n,m,输出n mod m 的值,n<=10^100,m<=10^9.
分析:
首先,把大整数写成“自左向右”的形式:比如1234=(1*10+2)*10+3)*10+4,然后利用前面的公式,每步取模像这样:
#include<stdio.h>
int main()
{
long long ans;
int m,n,i;
char s[100000];
scanf("%s%d",s,&m);
n=strlen(s);
for(i=0;i<=n;i++)
ans=(ans*10+s[i]-'0')%m;
printf("%ld",ans);
return 0;
}
本题中m为9,所以不用写成long long 类型,并且不用担心ans*10会溢出*/