1.普通方法:
#include<iostream>
using namespace std;
int main()
{
int a,n;
cin>>a>>n;
int i=0;
int num=0;
int a1=a;
a=a%10;
while(num<n-1)
{
a=a*a1;
while(a>=10)
a%=10;
num++;
}
cout<<"a="<<a<<endl;
return 0;
}
效率低,n太大时会超时。
2.递归:
#include<stdio.h>
#include<iostream>
using namespace std;
int fact(int n1,int a1)
{
if(n1%2&&n1>0)
{
return fact((n1-1)/2,a1)*fact((n1-1)/2,a1)*a1%10;
}
else if(n1%2==0&&n1>0)
{
return fact(n1/2,a1)*fact(n1/2,a1)%10;
}
else
return a1%10;
}
int main()
{
int a,n;
cin>>a>>n;
int res=0;
res=fact(n,a);
cout<<"res="<<res<<endl;
return 0;
}
效率低,n太大时也会超时。
3.分治
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a,n;
cin>>a>>n;
int res=1;
while(n)
{
if(n%2)
res=res*a%10;
n/=2;
a=a*a%10;
}
cout<<"res="<<res<<endl;
return 0;
}
效率高,不会超时