Rightmost Digit HDU - 1061

Given a positive integer N, you should output the most right digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the rightmost digit of N^N.
Sample Input
2
3
4
Sample Output
7
6

Hint
In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.
In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.

思路:当尾数为0,1,5,6时无论几次方均为尾数为其本身,当为其他数字时,尾数会产生循环,只需要把每种情况写进数组即可,但要注意,最后一个循环数字应该为a[0]。

#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a2[4] = { 6,2,4,8 }, a3[4] = { 1,3,9,7 }, a4[2] = { 6,4 };
	int a7[4] = { 1,7,9,3 }, a8[4] = { 6,8,4,2 }, a9[2] = { 1,9 };
	int t;
	cin >> t;
	while (t--)
	{
		int a;
		cin >> a;
		int b = a;
		if (b >= 10)
		{
			for (int i = 0;; i++)
			{
				b = b % 10;
				if (b < 10)break;
			}
		}
		if (b == 0 || b == 1 || b == 5 || b == 6) cout << b << endl;
		else if (b == 2) { int c = a % 4; cout << a2[c] << endl; }
		else if (b == 3) { int c = a % 4; cout << a3[c] << endl; }
		else if (b == 4) { int c = a % 2; cout << a4[c] << endl; }
		else if (b == 7) { int c = a % 4; cout << a7[c] << endl; }
		else if (b == 8) { int c = a % 4; cout << a8[c] << endl; }
		else if (b == 9) { int c = a % 2; cout << a9[c] << endl; }
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值