链接: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; }
天下武功,唯快不破