N^N末位数字求解

问题 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;
}

猜你喜欢

转载自blog.csdn.net/ultrasurreal/article/details/79598987
今日推荐