2991:2011

总时间限制: 
1000ms

内存限制: 
65536kB
描述
已知长度最大为200位的正整数n,请求出2011^n的后四位。
输入
第一行为一个正整数k,代表有k组数据,k<=200接下来的k行,

每行都有一个正整数n,n的位数<=200

输出
每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0
样例输入
3
5
28
792
样例输出
1051
81
5521
 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[];
int f(int n) //快速幂 ,求2011的n次方并求余10000;
{
if(n==)return ;
if(n==)return ;
int b=f(n/)%;
b=(b*b)%;
if(n%==)b=(b*)%;
return b;
}
int main()
{
int l,k,x=;
cin>>k;
for(int i=;i<=k;++i)
{
x=;
memset(a,,sizeof(a));//一定要赋初值0
scanf("%s",a);
l=strlen(a);
if(l==)x=a[]-''; //将字符串转为数字;
else if(l==)x=*(a[]-'')+(a[]-'');
else if(l==)x=*(a[]-'')+*(a[]-'')+(a[]-'');
else for(int i=l-;i<=l-;++i)
x=x*+(a[i]-'');
cout<<f(x)<<endl;
}
return ;
}
05-13 19:08