最原始的方法超时,Wa了几次,原因是 0^0 = 0 ?
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int a = n % 10;
int b = a;
int mod = 0;
for(int i = 1; i < n; i++)
{
b = (b * a) % 10;
if(b == a)
{
mod = i;
break;
}
}
if(1 == mod)
{
cout << a << endl;
continue;
}
if(mod != 0)
n = n % mod + mod;
b = a;
for(int i = 1; i < n; i++)
b = (b * a) % 10;
cout << b << endl;
}
return 0;
}
打表方法肯定是最快,附上打表代码:
#include<stdio.h>
int main()
{
int n;
int a[10][4] = {
{0},{1},{6,2,4,8},{1,3,9,7},{6,4},{5},{6},{1,7,9,3},{6,8,4,2},{1,9}},d,num;
scanf("%d",&num);
while(num--)
{
scanf("%ld",&n);
d = n % 10;
if(d == 0||d == 1||d == 5||d == 6)
printf("%d\n",d);
els

博客探讨了在解决HDU 1061问题时遇到的超时问题,由于0^0的特殊情况导致错误。文章推荐使用打表方法来优化计算N^N个位数的效率,并提供了相应的打表代码实现。
最低0.47元/天 解锁文章
2830

被折叠的 条评论
为什么被折叠?



