`

程序员面试题精选100题(44)-数值的整数次方

阅读更多
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。

不明白就看这个网址:
http://zhedahht.blog.163.com/blog/static/254111742009101563242535/

如何将指数分解为一个或若干个2的整数次方。我们把指数表示为二进制数再来分析。比如6的二进制表示为110,在它的第2位和第3位为1,因此6=2^(2-1)+2^(3-1) 。也就是说只要它的第n位为1,我们就加上2的n-1次方。
5^6=5^2*((5^2)^2)
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
    std::bitset<32> bits(exponent);
    if(bits.none())
        return 1.0;
    int numberOf1 = bits.count();
    double multiplication[32];
    for(int i = 0; i < 32; ++i)
    {
        multiplication[i] = 1.0;
    }
    // if the i-th bit in exponent is 1,
    // the i-th number in array multiplication is base ^ (2 ^ n)
    int count = 0;
    double power = 1.0;
    for(int i = 0; i < 32 && count < numberOf1; ++i)
    {
        if(i == 0)
            power = base;
        else
            power = power * power;
        if(bits.at(i))
        {
            multiplication[i] = power;
            ++count;
        }
    }
    power = 1.0;
    for(int i = 0; i < 32; ++i)
    {
        if(bits.at(i))
            power *= multiplication[i];

    }
    return power;
}


a^n = a^(n/2) * a^(n/2) 当n为偶数时候
       =a^((n-1)/2)*a^((n-1)/2)*a 当a为基数

所以设a^n = f(a,n) 然后就按照语义来做就是了

double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
    if(exponent == 0)
        return 1;
    if(exponent == 1)
        return base
    double result = PowerWithUnsignedExponent(base, exponent >> 1);
    result *= result;
    if(exponent & 0x1 == 1) //如果是奇数
        result *= base;
    return result;
}
分享到:
评论

相关推荐

    前端程序员面试分类模拟题--附答案详解

    【前端程序员面试分类模拟题及答案详解】 面试是评估求职者技能的重要环节,尤其是对于前端程序员来说,了解HTML、CSS、JavaScript以及网络协议等相关知识至关重要。以下是对题目中涉及的知识点的详细解释: 1. ...

    java程序员面试智力题

    ### Java程序员面试智力题知识点详解 #### 一、数学能力 **1. 元帅领兵** - **题目描述**:题目中描述了一个军队结构,从元帅往下依次是将军、营、阵、先锋、旗头、队、组、士兵。每一层级的数量都是8个。问题是...

    Java程序员面试宝典 算法题

    Java 程序员面试宝典 算法题 从给定的文件信息中,我们可以总结出以下知识点: 一、算法思想 1.1 排序 * 排序算法笔试模拟题精解之“数组变换” + 题目描述:给出一个长度为 n 的数组,和一个正整数 d。你每次...

    最新程序员面试题(达内内部培训资料):面霸v5.0修订.pdf

    根据提供的文件信息,可以看出这是一份达内教育集团内部用于培训程序员面试题目的资料,包含了多个编程语言方向的面试题目。接下来,我们将针对文件中的一部分Java基础知识面试题进行详细的解析和扩展。 ### Java...

    程序员面试宝典题目总结

    【程序员面试宝典题目总结】 1. 结构体内存对齐问题:在...这些面试题覆盖了C/C++编程语言的基础知识,包括内存管理、数据结构、运算符、位操作、函数调用、类型转换和异常处理等方面,都是程序员面试中常见的考察点。

    java面试题宝典2010

    ### Java面试题宝典2010 - 关键知识点解析 #### 一、Java基础部分 **1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?** 在一个`.java`文件中可以定义多个类,但是其中只能有一个公共类...

    java面试题.doc

    在Java面试中,掌握核心概念和技术是至关重要的。以下是一些关键知识点的详细说明: 1. **类和源文件关系**: - 一个`.java`源文件可以包含多个类,但只能有一个`public`类,且这个`public`类的名称必须与文件名...

    .NET基础面试题三

    ### .NET基础面试题解析 #### 1. 类与结构的区别 在.NET框架中,类和结构虽然在语法上相似,但在本质上有着重要的差异。**结构**(`struct`)是一种值类型,它存储在栈中,这意呈着结构的副本是由编译器创建和销毁...

    Java面试题收集.doc

    在Java编程语言中,面试题常常涉及到基础语法、逻辑操作和数据类型的使用。以下是对给定文件部分内容的详细解释: 1. **Java源文件中的类限制**: Java源文件可以包含多个类,但仅能有一个`public`类,且这个`...

    2013年Java面试题大全附参考答案(一)

    Java基础知识部分涵盖了Java编程语言的核心概念,它对面试中考察应聘者的编程...以上就是对Java基础知识部分的详细解读,它是理解和掌握Java编程语言不可或缺的一部分,也是应聘Java程序员时经常会被问到的面试问题。

    值得一看的java面试题

    ### 值得一看的Java面试题解析 #### 一、final、finally、finalize - **final**: 这个关键字在Java中具有多种用途。当应用于变量时,它表示该变量一旦被初始化就不能再被修改;当应用于方法时,表示该方法不能被子...

    leetcode分类-nowcoder:牛客网学习,包括剑指offer,程序员面试金典,leetcode,公司模拟真题,数据结构等

    11数值的整数次方 14调整数组顺序使奇数位于偶数前面 15链表中倒数第k个结点 16反转链表 17合并两个排序的链表 18树的子结构 19二叉树的镜像 20顺时针打印矩阵 21包含min函数的栈 22栈的压入弹出序列 23从上往下打印...

    Python面试题及答案共80道.docx

    3. 高级语言:Python提供了许多高级抽象,使得程序员可以专注于问题解决而非底层细节。 4. 易于调试:Python有强大的调试工具,便于找出和修复错误。 5. 支持面向对象编程(OOP):Python支持类和对象,方便进行复杂...

    2020年最新完整面试题(含答案).pdf

    例如,2相当于2乘以8,因为左移3位相当于乘以2的3次方。 在Java中,数组和String类都有length属性,而其他引用类型则有length()方法。对于数组,使用length属性获取其长度;对于String对象,使用length()方法。 当...

    python-leetcode面试题解之第342题4的幂.zip

    总之,"python_leetcode面试题解之第342题4的幂"这个资源是Python程序员提升算法技能和准备面试的宝贵资料。通过学习和实践,你不仅能掌握如何判断一个数是否为4的幂,还能了解到如何优化算法,提高解决问题的能力。

    C#面试笔试题目总结

    C#面试笔试题目总结 本资源收录了30页的C#面试笔试题目,涵盖了抽象类和接口、数据绑定、内存管理、委托、序列化、ADO.NET、面向对象编程等多方面的知识点。 1. abstract class 和 interface 的区别 abstract ...

    《剑指Offer》题目及代码(修订版2).pdf

    8. 数值的整数次方:考察了数学问题转化为编程问题的能力及边界条件处理。 书中所提到的算法和数据结构问题,都是程序员在面试时经常遇到的,例如: - 斐波那契数列的第n项、青蛙跳台阶问题:考察递归算法和数学...

    剑指Offer---Java版代码

    6. 查找算法:如数值的整数次方,数组中出现次数超过一半的数字等。 7. 动态规划:例如把数组排成最小的数,把数字翻译成字符串等。 8. 回溯算法:如丑数,二叉搜索树与双向链表等。 9. 字符串操作:包括字符串的...

Global site tag (gtag.js) - Google Analytics