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 }

    程序运行结果:

  • 相关阅读:
    SSD1963 低功耗应用
    LWIP UDP 协议分析
    CY22393的应用
    合并BIN文件的两种方法 转载
    STM32 PWM 互补输出函数 调试通过
    STM32 FSMC TFT LCD
    酷睿-家政保洁软件
    查询手机归属地
    折腾报表那些事儿(3) jatoolsprint
    table表格线条显示
  • 原文地址:https://www.cnblogs.com/qqky/p/6839598.html
Copyright © 2011-2022 走看看