快速幂和快速乘法

快速幂和快速乘法的原理类似。
都是巧妙使用二进制的算法。
代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int poww(int a,int b)
{
    int ans=1,base=a;  //ans存最后结果,base为中间结果
    while(b!=0)
    {
        if(b&1) //b的二进制表示末位为1
        {
            ans*=base;   //b末位为1,ans=ans*中间结果
        }
        base*=base;    //a^2^0 a^2^1 a^2^2 a^2^3
        b>>=1;         //b除以2
    }
    return ans;
}
int mul(int a,int b)
{
    int ans=0,base=a;   //ans存最后结果,base存中间结果
    while(b!=0)
    {
        if(b&1)
        {
            ans+=base;
        }
        base<<=1;    //a*2^0 a*2^1 a*2^2 a*2^3
        b>>=1;
    }
    return ans;
}
int main()
{
   int a,b;
   while(cin>>a>>b)
   {
       cout<<poww(a,b)<<endl;
       cout<<mul(a,b)<<endl;
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值