问题 G: 不开心的小明③
时间限制: 1 Sec 内存限制: 128 MB提交: 39 解决: 5
题目描述
这天小明又不开心了, 小明数学考零分, 麻麻竟然打小明屁股, 小明为了证明自己, 决定解决一道题目来证明自己, 题目意思如下:
给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
输入
第一行输入一个整数t,代表有t组测试数据(t <= 50)
每组数据只有一个整数N(1 <= N <= 10^18)
数据很大,请使用long long代替int。
输出
输出N^N的末位数字。
样例输入
2
1
13
样例输出
1
3
本来快速幂就可以过的,但是我不知怎么了过不了,然后就又用这个方法,应该是最优解了吧。
所有数值尾数不断幂次相乘,都会每四轮一循环。通过这个规律可以很简单的求解高次幂。
2¹=2 2²=4 2³=8 2⁴=6 2⁵=2
3¹=3 3²=9 3³=7 3⁴=1 3⁵=3
4¹=4 4²=6 4³=4 4⁴=6 4⁵=4
5¹=5 5²=5 5³=5 5⁴=5 5⁵=5
6¹=6 6²=6 6³=6 6⁴=6 6⁵=6
7¹=7 7²=9 7³=3 7⁴=1 7⁵=7
8¹=8 8²=4 8³=2 8⁴=6 8⁵=8
9¹=9 9²=1 9³=9 9⁴=1 9⁵=9
#include <iostream> typedef long long ll; using namespace std; int main() { int T; ll n; cin>>T; while(T--) { cin>>n; if(n%4==1)cout<<n%10<<endl; else if(n%4==2) { n%=10; cout<<n*n%10<<endl; } else if(n%4==3) { n%=10; cout<<n*n*n%10<<endl; } else { n%=10; cout<<n*n*n*n%10<<endl; } } return 0; }