杭电1097A hard puzzle(快速幂求余)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/suguoliang/article/details/81257578

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;
}

猜你喜欢

转载自blog.csdn.net/suguoliang/article/details/81257578