zoukankan      html  css  js  c++  java
  • 12 数值的整数次方

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
     
    常规解法:
     
    注意1double类型不能直接和0进行比较;
           2 要判断底数是否为0,要判断指数是否为负数;用一个变量先记录,然后统一使用正的指数进行计算。
          3 最后如果是负数需要将结果取倒数,而且前面要分奇数和偶数进行计算。
    class Solution {
    public:
        double Power(double base, int exponent) {
            if(base < 0.000001 && base > -0.000001){
                return 0.0;
            }
            if(exponent == 0){
                return 1.0;
            }
            int tmp = abs(exponent);
            double res = Power(base,tmp >> 1);
            res *= res;
            if(tmp % 2 == 1){
                res *= base;
            }
            if(exponent < 0){
                res = 1.0 / res;
            }
            return res;
        }
    };

    解法2:快速幂。

    tmp & 1 == 1,只能判断最后一位,0011 & 0010 = 0010 = 2.

    快速幂的原理相当于将指数变为二进制,分别计算每一二进制位的值然后相乘。

    一定记住对于这种有指数的一定要判断是否为负数,将负数转化为整数计算后取反,当然必须判断底数不为0;

     if(1 & tmp){
          res = res * base;
    }
     base = base * base;
     tmp = tmp >> 1;
    class Solution {
    public:
        double Power(double base, int exponent) {
            if((base < 0.00001) && (base > -0.00001)){
                return 0.0;
            }
            if(exponent == 0){
                return 1.0;
            }        
            double res = 1.0;        
            int tmp = abs(exponent);
            while(tmp){
                if(1 & tmp){
                    res = res * base;
                }
                base = base * base;
                tmp = tmp >> 1;
            }
            if(exponent < 0){
                res = 1.0 / res;
            }
            return res;
        }
    };
  • 相关阅读:
    python的基本操作while循环体
    python中类的神奇方法应用案例
    Python中类的神奇方法
    python 中类的初始化方法
    Python中类的创建和self的作用
    投掷骰子的游戏,键值对
    字典常用方法
    剪刀石头布
    math 模块
    PYTHON内置模块
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7922493.html
Copyright © 2011-2022 走看看