HDU 1061 Rightmost Digit

Problem  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.

 

题目简介:求n的n次方的最后一个数字。

方法:此题目前想到两种方法。一个是最开始的找规律。因为尾数0、1、4、5、6、9的结果都是定值。

 

     显然0、1、5、6是。尾数是4的数一定是偶数,又因为4*4=16可以看作是16的n/2次方,转化成6的问题了,所以尾数是4的数,最右边一定是6。同理,尾数为9的数一定是奇数。9*9=81,可以看作(81的n/2次方)*9,则最右边的数一定是9。

     3*3=9,9*3=27,27*3=81,81*3=243.可以看出,最后一个数是以4为周期循环的。而以3结尾的数一定是奇数,所以n%4不会出现余0或2的情况,可以简化成两种情况。

     同理,2、7、8也可以这样计算出来。

      

     另一种方法是快速幂。快速幂中有介绍。

 

 

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int t,n;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		switch (n%10)
		{
		case 0:printf("0\n");
			break;
		case 1:printf("1\n");
			break;
		case 2:
			switch(n%4)
			{
			case 2:printf("4\n");
				break;
			case 0:printf("6\n");
				break;
			}
			break;
		case 3:
			switch(n%4)
			{
			case 1:printf("3\n");
				break;
			case 3:printf("7\n");
				break;
			}
			break;
		case 4:printf("6\n");
			break;
		case 5:printf("5\n");
			break;
		case 6:printf("6\n");
			break;
		case 7:
			switch(n%4)
			{
			case 1:printf("7\n");
				break;
			case 3:printf("3\n");
				break;
			}
			break;
		case 8:
			switch(n%4)
			{
			case 0:printf("6\n");
				break;
			case 2:printf("4\n");
				break;
			}
			break;
		case 9:printf("9\n");
			break;
		}
	}
	system("pause");
	return 0;
}


 

你可能感兴趣的:(HDU 1061 Rightmost Digit)