本题描述(源自杭电OJ):
本题分析:火眼金睛,“打表找规律”速解此题
我们都知道,此题本质上就是相同个位数字的不断相乘。而相同个数数字不断相乘的结果,其个位数字呈周期性变化。
以数字3为例,第一次33=9,第二次93=7,第三次73=1,第四次13=3,回到最开始的3,因此3的循环周期为4。同样的,0~9都有其循环周期,我们只需要找到这个循环周期,后面一切都好办。
具体怎么办呢?看此时指数,如果指数%周期=x,那么在这个循环周期内的第x个数就是结果个位数。
举个例子,1233的1233次,个位数字是3,周期刚才分析过了是4,1233%4=1,循环周期内的数分别是{3,9,7,1},第1个数字是3,因此1233的1233次的个位数就是3。
明白了这个原理,接下来我们具体讲一讲代码如何实现!
代码实现:
#include<bits/stdc++.h> //(源自杭电LCY入门算法课程)
using namespace std;
void solve()
{
int n;
int a[10] = {1,1,4,4,2,1,1,4,4,2}; //对应数字0~9的循环周期长度
cin >> n;
int ans = 1;
int p = n % 10; //找到并存放N的个位数字于p
n = n % a[p]; //用n存放结果是循环周期中的第几个数
if (n == 0) //如果n=0,说明是循环周期中最后一个数,因此要加上循环周期长度
n += a[p];
for (int i = 1; i <= n; i++) //具体第几个数,就乘几次初始个位数
ans = (ans * p) % 10;
cout << ans << "\n";
}
int main()
{
ios::sync_with_stdio(false); //取消同步流,提高cin效率
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}