快速幂的计算方法,看一遍就够了

要求实现一个递归函数,高效求ab(1≤a,b≤62,ab<263)。在这个问题中我们不像往常一样进行每一层的便利 ,像我自己刚开始做的时候就是直接遍历的

long long int pow(int a, int b) {
  long long sum=1;
while(b--)
{
sum*=a
}
return sum;
}

这里我们定义了一个函数

long long int pow(int a, int b);
#include<iostream>
using namespace std;

long long int pow(int a, int b); //求a^b

//输入整数a,b,求 a^b,处理到文件尾 
int main() { 
    int a,b;
    while(cin>>a>>b) {
        cout<<pow(a,b)<<endl; 
    }    
    return 0;
}

long long int pow(int a, int b) {
    long long base=a;   //这里定义的是一个底数
    long long result=1; //这里定义的是一个结果
    while(b>0) //当我们的指数为0的时候就结束
    {
        if(b%2==1) result*=base;   //当指数为奇数的时候将底数进行一次乘积到result中 这样保证我们的指数为偶数
         base*=base;               //进行底数相乘 这样可以进行减少运算
        b=b/=2;  //指数减半
    }
    return result;//返回结果
}

这道题最主要就是遇到指数为奇数的时候,我们只要将底数乘积一次放入到原始结果中,我们的指数就为偶数,回到偶数当中,我举个例子2^{_{4}}的话我们会将底数进行 2*2得到4 ,指数就变为一半就为2,回到循环中 base就变为16 ,b=1。然后就进行返回得到16.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值