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
此题明显不能暴力求解N^N,显然数太大并且会超时。通过找规律可以知道数与数相乘其个位数至于两个乘数有关,所以只需提取每个乘数的个位数字即可。但提交过后发现报错TLE.再加思考很容易发现一个数连乘其个位数是几个数字的循环,所以只要找出此题的循环节即可。
AC代码:
#include<iostream> #include<algorithm> #include<memory.h> using namespace std; typedef long long ll; int a[10],b[10]; int main() { int T, i; ll n; cin >> T; while (T--) { for (int i = 0; i < 10; i++) a[i] = 0; int cnt = 0; cin >> n; int temp = n % 10, res=1; for (i = 0; i < 10; i++) { res = res*temp%10; a[res] += 1; b[i] = res; if (a[res] == 2) break; cnt++; } if (n % cnt == 0) cout << b[cnt - 1] << endl; else cout << b[n%cnt - 1] << endl; } return 0; }