链接:http://acm.hdu.edu.cn/showproblem.php?pid=1097
只考虑最后一位即可。 因为(0<a,b<=2^30)数据很大,。直接用常规方法求幂会超时。赤裸裸的二分求幂。取最后一位很简单,直接对10去余即可
下面说下二分求幂:
因为 a^b==(a*a)^(b/2)
a为基数,b为幂。 求a^b时,:::如果b为偶数,直接a*=a.;;.如果b为奇数,先ans*=a.,再a*=a; 然后将b减半,直到b==0时结束循环,ans为结果。
#include <stdio.h>
int main()
{
int power(int a,int b);
int a,b;
int i;
int ans;
while(scanf("%d%d",&a,&b)!=EOF)
{
a%=10;
printf("%d\n",power(a,b));
}
return 0;
}
int power(int a,int b)
{
int ans=1;
while(b!=0)
{
if(b%2==1)
ans*=a;
ans%=10;
b/=2;
a*=a;
a%=10;
}
return ans%10;
}