C - Rightmost Digit
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
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 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.
这种题目我怎么看都觉得有规律,自己一试果然如此
第一列为x,第二列为有几种结果,第三列为结果
0 1 0 1 1 1 2 4 2 4 8 6 3 4 3 9 7 1 4 2 4 6 5 1 5 6 1 6 7 4 7 9 3 1 8 4 8 4 2 6 9 2 9 1
然后代码就好写了。
#include <stdio.h> int pow(int x,long y); void main(void) { int case_n,case_i; long n; scanf("%d",&case_n); for (case_i = 1;case_i <= case_n;case_i ++) { scanf("%d",&n); printf("%d\n",pow(n % 10,n)); } } int pow(int x,long y) { int i; y --; i = y % 10; switch (x) { case 0: return 0; break; case 1: return 1; break; case 2: i = y % 4; switch (i) { case 0: return 2; break; case 1: return 4; break; case 2: return 8; break; case 3: return 6; break; default: return -1; } break; case 3: i = y % 4; switch (i) { case 0: return 3; break; case 1: return 9; break; case 2: return 7; break; case 3: return 1; break; default: return -1; } break; case 4: i = y % 2; switch (i) { case 0: return 4; break; case 1: return 6; break; default: return -1; } break; case 5: return 5; break; case 6: return 6; break; case 7: i = y % 4; switch (i) { case 0: return 7; break; case 1: return 9; break; case 2: return 3; break; case 3: return 1; break; default: return -1; } break; case 8: i = y % 4; switch (i) { case 0: return 8; break; case 1: return 4; break; case 2: return 2; break; case 3: return 6; break; default: return -1; } break; case 9: i = y % 2; switch (i) { case 0: return 9; break; case 1: return 1; break; default: return -1; } break; default: return -1; } } /* 0 1 0 1 1 1 2 4 2 4 8 6 3 4 3 9 7 1 4 2 4 6 5 1 5 6 1 6 7 4 7 9 3 1 8 4 8 4 2 6 9 2 9 1 */