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