【UOJ 667】2011的n次方
阿新 • • 發佈:2020-10-05
【題目描述】:
已知長度最大為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\n",f[x%500]); } return 0; }