Rightmost Digit
Time Limit: 1000 ms
Memory Limit: 65535 kB
Description
Given a positive integer N, you should output the rightmost 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
Source
我们很容易知道n^n的最后一位数只与n最初的最后一位数有关,且n最后一位数的循环节为如下数组:
{1, 1, 4, 4, 2, 1, 1, 4, 4, 2},其中第一个对应数字0,最后一个对应数组9,所以很容易得知最后一位数字乘以n次之后的数字为多少。
#include <cstdio>
int main()
{
int f[10] = {1, 1, 4, 4, 2, 1, 1, 4, 4, 2};
FILE * fin, * fout;
fin = fopen("1.std.in", "r");
fout = fopen("1.std.out", "w");
int t, n, remainder, num, ans;
fscanf(fin, "%d", &t);
while ( t-- )
{
fscanf(fin, "%d", &n);
remainder = n % 10;
num = n % f[remainder];
if ( !num )
{
num = f[remainder];
}
ans = remainder;
for ( int i = 1; i < num; i++ )
{
ans = ( ans * remainder ) %10;
}
fprintf(fout, "%d\n", ans);
}
return 0;
}