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 ;
}