1. 程式人生 > 實用技巧 >【UOJ 667】2011的n次方

【UOJ 667】2011的n次方

【題目描述】:

已知長度最大為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; }