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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值