zoukankan      html  css  js  c++  java
  • 12、剑指offer--数值的整数次方

    题目描述
    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
     
    解题思路:首先要注意特殊情况的处理   base为0情况  exponent为0 为1情况  exponent为负数情况
     1 #include <iostream>
     2 using namespace std;
     3 class Solution {
     4 public:
     5     //要注意的几点
     6     //1、base == 0
     7     //2、exponent == 0;==1
     8     //3、exponent 为负数
     9     double Power(double base, int exponent) {
    10         if(equal(base,0.0))
    11         {
    12             return 0.0;
    13         }
    14         unsigned int abExponent = (unsigned int)(exponent);//一定要注意此处给其赋值,否则如果exponent不小于0时,该值随机,会出现错误
    15         if(exponent < 0)
    16             abExponent = (unsigned int)(-exponent);
    17         double result = 1.0;
    18         for(int i=1;i<=abExponent;i++)
    19         {
    20             result *= base;
    21         }
    22         if(exponent<0)
    23             return 1.0/result;
    24         else
    25             return result;
    26 
    27 
    28     }
    29     bool equal(double num1,double num2)
    30     {
    31         if((num1-num2)>-0.0000001 && (num1-num2)<0.0000001)
    32         {
    33             return true;
    34         }
    35         else
    36             return false;
    37     }
    38     //方法二:a^n = a^(n/2)*a^(n/2)   n为偶数
    39     //        a^n = a^(n/2)*a^(n/2)*a n为奇数
    40     double Power2(double base, int exponent) {
    41         if(equal(base,0.0))
    42         {
    43             return 0.0;
    44         }
    45         if(exponent == 0)
    46             return 1.0;
    47         else if(exponent == 1)
    48             return base;
    49         unsigned int abExponent = (unsigned int)(exponent);
    50         if(exponent < 0)
    51             abExponent = (unsigned int)(-exponent);
    52         double result = Power2(base,abExponent>>1);//右移1相当于除以2
    53         result *= result;//a^(n/2)*a^(n/2);
    54         if(abExponent & 0x1 == 1)//奇数
    55         {
    56             result *= base;
    57         }
    58         if(exponent < 0)
    59             return 1.0/result;
    60         else
    61             return result;
    62     }
    63 };
    64 int main()
    65 {
    66     double n ;
    67     int x;
    68     while(cin>>n>>x)
    69     {
    70         Solution s;
    71         cout<<"调用方法一:"<<n<<""<<x<<"次方为:"<<s.Power(n,x)<<endl;
    72         cout<<"调用方法二:"<<n<<""<<x<<"次方为:"<<s.Power2(n,x)<<endl;
    73     }
    74     return 0;
    75 }

    程序运行结果:

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/qqky/p/6839598.html
Copyright © 2011-2022 走看看