【题目描述】
已知长度最大为200位的正整数n,请求出2011n的后四位。
【输入】
第一行为一个正整数k,代表有k组数据(k≤200),接下来的k行,每行都有一个正整数n,n的位数≤200。
【输出】
每一个n的结果为一个整数占一行,若不足4位,去除高位多余的0。
【输入样例】
3
5
28
792
【输出样例】
1051
81
5521
经打表找规律,该数的500次方为一次循环,即n = 1,501,1001的答案是一样的,所以只要取数的后3位计算即可
#include <iostream>
using namespace std;
const int N = 10000;
int main()
{
int T;
cin >> T;
while(T --)
{
string s;
cin >> s;
int n = 0;
for(int i = max((int)s.size() - 3, 0); i < s.size(); i ++)
n = n * 10 + s[i] - '0';
int ans = 1;
for(int i = 1; i <= n; i ++)
ans = ans * 2011 % N;
cout << ans << endl;
}
return 0;
}
不正经的总结:似乎这总题都只要打表找出循环的规律即可。