题目大意
求2011的n次方,n为高精度数
枚举可以发现n=500时为1;所以取末三位对500取模
代码
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll Quick_Pow(ll a,ll b){
ll re=1;
while(b){
if(b&1){
re*=a;
re%=10000;
}
a*=a;
a%=10000;
b>>=1;
}
return re;
}
int k,len;
char n[1000];
ll t,a;
int main(){
cin>>k;
while(k--){
cin>>n;
len=strlen(n);
t=1,a=0;
if(len<=4){
for(int i=len-1;i>=0;i--){
a+=(n[i]-'0')*t;
t*=10;
a%=500;
}
}else{
for(int i=len-1;i>=len-3;i--){
a+=(n[i]-'0')*t;
t*=10;
a%=500;
}
}
cout<<Quick_Pow(2011,a)%10000<<endl;
}
}