-
总时间限制:
- 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<cstdio>
#include<cstring>
using namespace std;
int a[505];
const int M=10000;
int quick_pow(int x,int y)
{
if(y==1)
return a[1]=2011;
if(a[y])
return a[y];
if(y%2)
return a[y]=quick_pow(x,y/2)*quick_pow(x,y/2)%M*2011%M;
else
return a[y]=quick_pow(x,y/2)*quick_pow(x,y/2)%M;
}
int main()
{
int n,temp;
cin>>n;
for(int i=1;i<=n;i++)
{
char s1[205]={},s[8]={};
scanf("%s",s1);
int t[8]={};
int len=strlen(s1);
if(len==1)
temp=s1[len-1]-'0';
else if(len==2)
temp=s1[len-1]-'0'+(s1[len-2]-'0')*10;
else
{
s[0]=s1[len-3],s[1]=s1[len-2],s[2]=s1[len-1];
for(int i=0;i<3;i++)
t[i]=s[i]-'0';
temp=(100*t[0]+10*t[1]+t[2])%500;
}
cout<<quick_pow(2011,temp)<<endl;
}
return 0;
}
希望能对您的创作起到作用!