HDOJ HDU 1061 Rightmost Digit
题目
分类
找规律
题意
求 NN (N^N) (1<=N<=1,000,000,000) 最右边的数字
题解
这个确实简单
看N的数量肯定不能暴力
我们注意到
阶乘 末尾数 有循环节
下面给出循环表
末尾数 尾数循环 循环位数 0 0 1 1 1 1 2 4 8 6 2 4 3 9 7 1 3 4 4 6 4 2 5 5 1 6 6 1 7 9 3 1 7 4 8 4 2 6 8 4 9 1 9 2 根据循环位数散列到表查表即可
代码
#include <iostream>
using namespace std;
int l[10][10];
int t[10];
int main()
{
int n,m,z;
l[0][0] = 0;
t[0] = 1;
l[1][0] = 1;
t[1] = 1;
for(int i = 2;i < 10;i++)
{
l[i][0] = i;
for(int j = 1;j < 10;j++)
{
l[i][j] = (l[i][j-1] * i) % 10;
if(l[i][j] == l[i][0])
{
t[i] = j;
break;
}
}
}
/* for(int i = 0;i < 10;i++)
{
for(int j = 0;j < 10;j++)
{
cout << l[i][j] << " ";
}
cout << endl;
}
for(int i = 0;i < 10;i++)
cout << t[i] << " " ;*/
cin >> n;
while(n--)
{
cin >> m;
z = m;
z %= 10;
cout << l[z][(m - 1) % t[z]] << endl;
}
return 0;
}