【题目描述】:
已知长度最大为200位的正整数n,请求出2011^n的后四位。
【输入描述】:
第一行为一个正整数k,代表有k组数据,接下来的k行,
每行都有一个正整数n。
【输出描述】:
每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0。
【样例输入】:
3
5
28
792
【样例输出】:
1051
81
5521
【时间限制、数据范围及描述】:
时间:1s 空间:64M
n的位数<=200; k<=200
题解:打表发现——500即为一个循环节,那么就很简单啦 QWQ!
#include<cstdio> #include<iostream> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<bits/stdc++.h> typedef long long ll; using namespace std; int x,Estar,len; char s[555]; int f[555]; void QGhappy(){ int now=1; for(int i=1;i<=500;i++) { now*=2011; now%=10000; f[i]=now; } } int DYG(){ int xx; len=strlen(s); if(len==1) xx=(s[len-1]-'0'); if(len==2) xx=(s[len-1]-'0')+10*(s[len-2]-'0'); if(len>2) xx=(s[len-1]-'0')+10*(s[len-2]-'0')+100*(s[len-3]-'0'); return xx; } int main(){ freopen("bigpower.in","r",stdin); freopen("bigpower.out","w",stdout); cin>>Estar; QGhappy(); while(Estar--){ cin>>s; x=DYG(); printf("%d ",f[x%500]); } return 0; }