【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
",f[x%500]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/wuhu-JJJ/p/13770347.html