zoukankan      html  css  js  c++  java
  • 剑指offer系列6:数值的整数次方

    在计算float和double型的变量时,判断值为0不能直接判断是否等于0,因为计算机表示小数时存在误差,所以判断两个数的误差的绝对值很小即可认为相等。

    在要做除法运算时,如果除以2,用右移运算代替可以提高效率。

     1 #include<iostream>
     2 using namespace std;
     3 class Solution {
     4 public:
     5     double Power(double base, int exponent) {
     6         if (base == 0)
     7         {
     8             return 0;
     9         }
    10         if (exponent == 0)
    11         {
    12             return 1;
    13         }
    14         unsigned int absexponent = (unsigned int)exponent;//给指数取绝对值
    15         if (exponent < 0)
    16         {
    17             absexponent = (unsigned int)(-exponent);//如果是负数直接强转类型后数值错误,所以给他改正回去
    18         }
    19         double re=1;
    20         if(absexponent !=1)
    21         { 
    22             re = Power(base, absexponent >> 1);//右移除以2
    23             re *= re;
    24         }
    25 
    26         if (absexponent & 0x1)//与1进行与运算判断这个数是否为奇数
    27         {
    28             re *= base;
    29         }
    30         if (exponent < 0)
    31         {
    32             re = 1 / re;
    33         }
    34         return re;
    35     }
    36 };
    37 int main()
    38 {
    39     Solution so;
    40     cout << so.Power(2, 4) << endl;
    41     return 0;
    42 }

    我开始拿到这个题还在想这不是pow函数可以解决的事情吗?看了答案发现就是要注意已有的函数的实现方法。其中有一些小细节要注意。

  • 相关阅读:
    快乐
    端午节杂记
    消失一段时间
    做好自己,做最好的自己
    童童的儿童节
    *完成第一个Java的程序(Jogl的一个窗口框架)
    *JS实现HashTable的例子
    *JavaScript检查ActiveX控件是否已经安装过
    *DOS命令REG操作注册表
    *汇总c#.net常用函数和方法集
  • 原文地址:https://www.cnblogs.com/neverland0718/p/10975512.html
Copyright © 2011-2022 走看看