• 数值的整数次方


    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
    保证base和exponent不同时为0
     
    思路:(考察代码的完整性,考验对数据处理的严谨性)
      1.全面考察指数的正负、底数是否为零等情况。
      2.写出指数的二进制表达,例如13表达为二进制1101。
      3.举例:10^1101 = 10^0001*10^0100*10^1000。
      4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
     
    class Solution {
    public:
        double Power(double base, int exponent) {
            double res = 1,curr = base;
            int n;
            if(exponent > 0)
            {
                n = exponent;
            }
            else if(exponent< 0)
            {
                if(base == 0)
                {
                    return -1;
                }
                n = -exponent;
            }
            else
            {
                return 1;
            }
            while(n != 0)
            {
                if((n & 1) == 1)
                {
                    res *= curr;
                }
                curr*=curr;
                n >>= 1;
            }
            return exponent >=0?res:(1/res);
        }
    };

    比如,3^8 = 3^1010 = 3^1000 * 3^0010 = 3^8 * 3^2

     

       为上述代码做了一个简单的举例说明,方便理解

  • 相关阅读:
    构建之法 阅读笔记01
    个人作业1 -数组
    进度一
    开课博客
    生活尝试
    人月神话3
    安卓开发工具
    人月神话 2
    Qt 的入门小程序
    提问的智慧 摘抄(How To Ask Questions The Smart Way)
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12483307.html
Copyright © 2020-2023  润新知