Rightmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31895 Accepted Submission(s): 12218
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).
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 6HintIn 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.
Author
Ignatius.L
该题要求N的N次方的最后一位,若直接用for循环一个个乘,肯定会TLE,可以直接
用N对10取余的N次方,而一个数的n次方的个位数是循环的,且循环数不大于10。
#include <iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main()
{
int a;//需用int ,WA的原因
int b,c,t,i,j,k;
int p[10],q[10];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
memset(p,0,sizeof(p));
memset(q,0,sizeof(q));
k=1;//记录有几个数字
scanf("%lld",&a);
b=a%10;
c=b;
q[c]=1;
p[0]=c;
c=(c*b)%10;
while(!q[c])//判断是否有过这个数
{
p[k++]=c;//存储这个数的n次方的个位数字
q[c]=1;
c=(c*b)%10;
}
printf("%d\n",p[(a-1)%k]);
}
}
return 0;
}