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;
        }
    };
  • 相关阅读:
    .net同时执行多条sql语句(含事务功能)
    SQL标量值函数:小写金额转大写
    找出与某id相近的四条记录
    sql查询优化 索引优化
    半成品收发数量流程管控
    半成品进销存
    多表分页查询存储过程
    DataGridView数据用NPOI导出到Excel
    SQL事务+存储过程
    left join、right join和join的区别
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7922493.html
Copyright © 2011-2022 走看看