Description
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).
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.
我们知道在数学表达式中pow(x, n)表示求x^n的幂。一般情况下,如果我们要写一个程序的话,最简单的程序可能是这样的:
int pow(int x, int n) { int result = 1; while (n != 0) { result = result *x; n = n -1; } return result; }
我们也可以对求幂函数进行优化:例如2^9 = 2^(1001) 括号里面是二进制数制。在我们做2^9乘法的时候,我们是用这样的方法来乘的:2^9 = 2^8 * 2^1
也就是只有在二进制数位上为1时乘一个2^n,而在二进制数位上为0时,则不乘。
int pow(int x, int n) { int result = 1; while (n > 0) { if (n%2==1) { result *= x; result %= 10; } x *= x; x %= 10; n /= 2; } return result; }
下面为题目代码:
#include <stdio.h> #include <iostream> using namespace std; int pow(int x, int n) { int result = 1; while (n > 0) { if (n%2==1) { result *= x; result %= 10; } x *= x; x %= 10; n /= 2; } return result; } int main() { int t; scanf("%d", &t); while(t--) { int sum; int n; scanf("%d", &n); sum = pow(n%10,n); printf("%d\n", sum%10); } return 0; }