题目: 给定一个整数N, 求N^N的十进制表示中最右端的那个数。(这里^表示幂运算)
分析:直接的想法是求出N^N,但是这样几乎百分百会溢出。
从0到9求一下各自的幂的最右数字的变化,发现有时循环重复的,而N的最右端数字只与其个位数有关,因此,这里就是求个位数k的N次幂的最右端数字,可以把它们都枚举出来然后解答。
个人代码如下:
#include <iostream>
using namespace std;
int Right[10][4] = { {0}, {1}, {2,4,8,6}, {3,9,7,1}, {4,6}, {5},
{6}, {7,9,3,1}, {8,4,2,6}, {9,1} };
int Len[10] = { 1 , 1 , 4, 4, 2, 1, 1, 4, 4, 2};
int GetRightMostDigit( int n )
{
int r = n%10;
int l = n % ( Len[r]);
if( l == 0 )
return Right[r][ Len[r] - 1];
return Right[r][l-1];
}
int main()
{
int test = 0;
while( cin>> test )
{
int n = 0;
for( int i = 0; i < test; i++ )
{
cin>>n;
cout<<GetRightMostDigit( n )<<endl;
}
}
return 0;
}