首页 > 代码库 > 2991:2011 求2011^n的后四位。
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的后四位。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。