求n的n次方个位数是几
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.
公式求幂→二分求幂→快速求幂→快速求幂取模
等不急的可以直接下拉到最后看快速幂取模。
直接用C语言的库函数pow(),似乎很简单,但是它的时间复杂度高达O(n)。而且还会数据溢出
显然,这很容易超时。
于是有了下面的二分求幂(时间复杂度O(lgn))
package _001_HDU1061RightmostDigit;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
System.out.println(rightmost(sc.nextInt()));
}
}
}
private static int rightmost(int nextInt) {
int n = nextInt%10;
int sum = 1;
while(nextInt!=0) { //快速取幂法
if(nextInt%2==1) {nextInt--;sum=(sum*n)%10;}
nextInt/=2;
n=(n*n)%10;
}
return sum;
}
}