hdoj Rightmost Digit 1061 (数学转换&&找循环节)

Rightmost Digit

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 42222    Accepted Submission(s): 15907


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得个位数是什么,其实可以转化为,N的个位数(用n表示)的N 次方,并且还可以进一步简化就是
他们若N比较大时会出现循环节。
比如:2的循环节为4(2,4,8,6)
3的循环节为4(3,9,7,1)....
所以可以转化为以下代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int vis[10];
int a[10];
int main()
{
	int t;
	int n;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		int mm=n%10;
		int m=mm;
		int kk=0;
		memset(vis,0,sizeof(vis));
		memset(a,0,sizeof(a));
		while(!vis[m])
		{
			vis[m]=1;
			a[kk++]=m;
			m=(m*mm)%10;
		}
		int k=(n-1)%kk;
		printf("%d\n",a[k]);
	}
	return 0;
}

你可能感兴趣的:(hdoj Rightmost Digit 1061 (数学转换&&找循环节))