劍指offer66題--Java實現,c++實現和python實現 12.數值的整數次方
阿新 • • 發佈:2018-12-29
題目描述
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
C++
/* 功能測試:base=2,exponent=32 邊界測試:base=0,exponent=-1 return base!=0,exponent=1,0,-1 錯誤輸入: */ class Solution { public: bool g_InvalidInput=false; double Power(double base, int exponent) { g_InvalidInput=false; if(base==0&&exponent<0) { g_InvalidInput=true; return 0.0; } int absexponent=exponent; if(exponent<0) { absexponent=-exponent; } double result=PowerWithUnsignedExponent(base,absexponent); if(exponent<0) { result=1.0/result; } return result; } double PowerWithUnsignedExponent(double base,int exponent) { double result=1.0; for(int i=0;i<exponent;i++) { result*=base; } return result; } };
Java
public class Solution { public double Power(double base, int exponent) { // 當底數為0,指數為負數時,則丟擲異常或者返回0.0 if (equal(base, 0) && exponent < 0) { return 0.0; } // 先對指數進行取絕對值計算 int absExponent = Math.abs(exponent); double result = powerWithExponent(base, absExponent); // 判斷如果傳入的指數是負數,進行取反,否則直接返回 if (exponent < 0) { result = 1.0 / result; } return result; } // 計算數值的整數次方 public double powerWithExponent(double base, int absExponent) { double result = 1.0; for (int i = 1; i <= absExponent; ++i) { result *= base; } return result; } // 判斷兩個double型別的數值是否相等 public boolean equal(double num1, double num2) { if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001)) { return true; } else return false; } }
python
# -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): # write code here result = 1.0 if exponent >= 0: for i in range(exponent): result *= base else: for i in range(abs(exponent)): result *= base result = 1.0/result return result