Rightmost Digit(快速幂)

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次递归调用就能出结果,效率极大的提高了

原文地址:https://www.cnblogs.com/wangmengmeng/p/4552455.html