我是靠谱客的博主 无心服饰,最近开发中收集的这篇文章主要介绍数据结构练习(33)数值的整数次方,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

http://zhedahht.blog.163.com/blog/static/254111742009101563242535/

思路:

见过斐波那契,然后这题直接想到了递归2分法求解。

方法一还是蛮不错的,利用了位运算。不过代码写起来比较冗长。

#include <iostream>
#include <bitset>
using namespace std;

double PowerWithExponent_1(double base, size_t exp)
{
    bitset<32> bits(exp);

    if (bits.none())
        return 1.0;

    double b[32];
    for (int i = 0; i < 32; ++i)
        b[i] = 1.0;

    double power = 1.0;
    size_t cnt = 0;
    for (int i = 0; i < 32 && cnt <= bits.count(); ++i)
    {
        if (i == 0)
            power = base;
        else
            power *= power;

        if (bits.at(i))
            b[i] = power, ++cnt;
    }

    power = 1.0;
    for (int i = 0; i < 32; ++i)
        if (bits.at(i))
            power *= b[i];

    return power;
}

double PowerWithExponentRecursively(double base, unsigned int exp)
{
    if (exp == 0)
        return 1.0;

    double power = PowerWithExponentRecursively(base, exp >> 1);
    power *= power;

    if (exp & 0x01)
        power *= base;

    return power;
}

int main()
{
    double power1 = PowerWithExponent_1(2.3, 3);
    double power2 = PowerWithExponentRecursively(2.3, 3);
    cout << power1 << " " << power2 << endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/kedebug/archive/2012/12/18/2823161.html

最后

以上就是无心服饰为你收集整理的数据结构练习(33)数值的整数次方的全部内容,希望文章能够帮你解决数据结构练习(33)数值的整数次方所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部