问题链接 - http://www.spoj.com/problems/LASTDIG/
摘要 - 给定 2 个非负整数 a 和 b,打印 a^b 的最后一位。
我尝试使用一种算法来使用更少的内存空间( http://en.wikipedia.org/wiki/Modular_exponentiation#Memory-efficient_method )找到模幂,但我的解决方案出现 TLE(超出时间限制)错误。我应该进行哪些更改才能在 1 秒内运行我的代码?请注意,需要在 1 秒内运行 10 个测试用例。
我的解决方案:
#include<iostream>
#include<vector>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
typedef long long LL;
using namespace std;
int ME(LL A, LL B)
{
LL c=1;
int E=0;
while(E<B)
{
c=(c*A)%10;
E++;
}
return c;
}
int main()
{
int t;
LL a, b;
vector <int> lDigit(31);
cin>>t;
for(int i=0;i<t;i++)
{
cin>>a>>b;
if(b>=99999)
lDigit[i]=ME(a, b);
else
{
int temp=pow(a, b);
lDigit[i]=temp%10;
}
}
for(int i=0;i<t;i++)
cout<<lDigit[i]<<endl;
return 0;
}