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).
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.
方法一:
1 #include <iostream> 2 using namespace std; 3 int a[25]={0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9,0}; 4 int main() 5 { 6 int b,n; 7 cin>>b; 8 while(b--) 9 { 10 cin>>n; 11 cout<<a[n%20]<<endl; 12 } 13 return 0 ; 14 }
方法二:
1 #include<stdio.h> 2 int my_power(int m, int n); // 求m的n次方的尾数 3 int main() 4 { 5 int cases, n; 6 scanf("%d", &cases); 7 while(cases--) 8 { 9 scanf("%d", &n); 10 printf("%d ", my_power(n, n)); 11 } 12 13 return 0; 14 } 15 16 int my_power(int m, int n) 17 { 18 m = m%10; 19 if(n == 1) 20 return m; 21 if(n%2 == 0) 22 return ( my_power(m*m, n/2) ) % 10; 23 else 24 return ( my_power(m*m, n/2)*m ) % 10; 25 }
快速幂的时间复杂度是O(logn),n = 10亿时,大约32次递归调用就能出结果,效率极大的提高了