2991:2011 求2011^n的后四位。

Posted HWIM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2991:2011 求2011^n的后四位。相关的知识,希望对你有一定的参考价值。

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 } 

 

以上是关于2991:2011 求2011^n的后四位。的主要内容,如果未能解决你的问题,请参考以下文章

OpenSSL测试-大数

怎样把一串数字字符串的后四位换成****?

2011

2011x

2011的n次方

hdu1568&&hdu3117 求斐波那契数前四位和后四位