A hard puzzle
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 36011 Accepted Submission(s): 12871
Problem Description
lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how to know the a^b.everybody objects to this BT problem,so lcy makes the problem easier than begin.
this puzzle describes that: gave a and b,how to know the a^b's the last digit number.But everybody is too lazy to slove this problem,so they remit to you who is wise.
Input
There are mutiple test cases. Each test cases consists of two numbers a and b(0<a,b<=2^30)
Output
For each test case, you should output the a^b's last digit number.
Sample Input
7 66
8 800
Sample Output
9
6
Author
eddy
快速幂汉字解释: 先对a求mod余然后进入循环一直到b/2=0为止 如果b当前为奇数 则ans*a否则a再*个a.
#include<stdio.h>
using namespace std;
const int mod =10;
int quick_pow(int a,int b)
{
if(a==0)
{
return 0;
}
int ans=1;
a=a%mod;
while(b)
{
if(b&1)
{
ans=(ans%mod)*(a%mod)%mod;
}
b>>=1;
a=(a*a)%10;
}
return ans;
}
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
int ans=quick_pow(a,b);
printf("%d\n",ans);
}
return 0;
}