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

你可能感兴趣的:(right)