0
点赞
收藏
分享

微信扫一扫

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


Hint


 


题意虽说是让求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;
}


举报

相关推荐

0 条评论