题目描述
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数除10003之后的余数。
输入
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。
输出
输出n整除10003之后的余数,每次输出占一行。
样例输入
3
4
5
465456541
样例输出
4
5
6948
题目分析
本题主要考查同余定理的性质及推导。
根据同余定理可得出:(a+b)%c=((a%c)+(b%c))%c
a%c举例:
对于一个大数求其%N 的值,例如求1234 可以写成 1*1000+2*100+3*10+4 =((1*10)+2)*10+3)*10+4 所以 1234%N=(((1*10)%N+2)*10%N+3)*10%N+4%N
程序关键点:
设一整型数据ans存储结果 ans=0;
ans=(ans*10+a[i])%N (a[i] 代表数据每个位上的数据)
代码
#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #define MAX 1000005 #define N 10003 using namespace std; char num[MAX]; int main(){ int m; scanf("%d",&m); while(m--){ scanf("%s",num); int len=strlen(num); int ans=0; for(int i=0;i<len;i++){ ans=(int)((ans*10+(num[i]-'0'))%N); } printf("%d\n",ans); } } |