1234:2011
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
已知长度最大为200位的正整数n,请求出2011n的后四位。
【输入】
第一行为一个正整数k,代表有k组数据(k≤200),接下来的k行,每行都有一个正整数n,n的位数≤200。
【输出】
每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0。
【输入样例】
3
5
28
792
【输出样例】
1051
81
5521
#include <stdio.h>
#include <string.h>
int a[505],b[201];
char s[201];
int main(int argc, char *argv[])
{
int n,m,t,i,j,sl;
i=0;t=2011;
do{
i++;a[i]=t;t*=2011;t%=10000;
}while(t!=2011);//存储所有可能的后四位数
m=i;//储存循环周期
a[0]=a[i];
//printf("%d\n",m);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s",s);
sl=strlen(s);
for(j=0;j<sl;j++)b[j+1]=s[j]-'0';//字符串转数组
t=0;
for(j=1;j<=sl;j++) t=(t*10+b[j])%m;//计算指数的周期余数
printf("%d\n",a[t]);
}
return 0;
}