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
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 char a[201]; 6 int f(int n) //快速幂 ,求2011的n次方并求余10000; 7 { 8 if(n==0)return 1; 9 if(n==1)return 2011; 10 int b=f(n/2)%10000; 11 b=(b*b)%10000; 12 if(n%2==1)b=(b*2011)%10000; 13 return b; 14 } 15 int main() 16 { 17 int l,k,x=0; 18 cin>>k; 19 for(int i=1;i<=k;++i) 20 { 21 x=0; 22 memset(a,0,sizeof(a));//一定要赋初值0 23 scanf("%s",a); 24 l=strlen(a); 25 if(l==1)x=a[0]-‘0‘; //将字符串转为数字; 26 else if(l==2)x=10*(a[0]-‘0‘)+(a[1]-‘0‘); 27 else if(l==3)x=100*(a[0]-‘0‘)+10*(a[1]-‘0‘)+(a[2]-‘0‘); 28 else for(int i=l-4;i<=l-1;++i) 29 x=x*10+(a[i]-‘0‘); 30 cout<<f(x)<<endl; 31 } 32 return 0; 33 }
时间: 2024-10-10 04:00:43