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函数可以解决的事情吗?看了答案发现就是要注意已有的函数的实现方法。其中有一些小细节要注意。

  • 相关阅读:
    LINNX联网配置文件
    linux文件系统配置文件
    linux引导和登录/注销配置文件
    LINUX访问文件配置
    LINUX配置文件介绍
    tcpdump的表达式介绍
    tcpdump命令介绍
    DNS客户端配置文件/etc/resolv.conf
    tcpdump概述
    LINUX普通猫的拔号工具介绍
  • 原文地址:https://www.cnblogs.com/neverland0718/p/10975512.html
Copyright © 2011-2022 走看看