剑指offer---数值的整数次方(11)
2017-12-08 19:38
375 查看
题目:实现函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数的问题
#include <iostream> using namespace std; bool g_InvalidInput = true; //判断基数是否等于0; bool equal(double num1,double num2) { if( (num1-num2)>-0.0000001 && (num1-num2) < 0.0000001) { return true; } return false; } //计算base、exponent不为0,且exponent大于0 #if 0 double PowerWithUnsignedExponent(double base,unsigned int exponent) { double result = 1.0; for(unsigned int i=1;i <= exponent;i++) { result *= base; } return result; } #endif //效率比较高 double PowerWithUnsignedExponent(double base,unsigned int exponent) { if(exponent == 0) return 1; if(exponent == 1) return base; double result = PowerWithUnsignedExponent(base,exponent>>1); result *= result; //指数为奇数 if(exponent & 0x1 ==1) result *= base; return result; } double Power(double base,int exponent) { //base=0,并且指数exponent<0,要对0求倒数,会出错。 if(equal(base,0.0) && exponent < 0) { g_InvalidInput = false; return 0.0; } unsigned int absExponent = (unsigned int)exponent; if(exponent < 0) absExponent = (unsigned int)(-exponent); double result = PowerWithUnsignedExponent(base,absExponent); if(exponent < 0) { result = 1.0/result; } return result; } int main() { double tmp = Power(2,-2); if(g_InvalidInput) { cout<<tmp<<endl; } else { cout<<tmp<<" "<<"输入参数有误"<<endl; } return 0; }
相关文章推荐
- 【剑指Offer】面试题11:数值的整数次方
- 剑指offer之面试题11数值的整数次方
- 【剑指offer】题11:数值的整数次方
- 剑指offer面试题[11]-数值的正整数次方
- 剑指offer——面试题11:数值的整数次方
- [剑指offer][面试题11]数值的整数次方
- 剑指Offer面试题11(Java版):数值的整数次方
- 剑指Offer学习之面试题11 :数值的整数次方
- 剑指Offer_面试题11_数值的整数次方
- 剑指offer面试题11 数值的整数次方
- 剑指offer 面试题11 数值的整数次方
- 剑指offer-3-面试题11:数值的整数次方(对错误的处理)
- 剑指offer-面试题11.数值的整数次方
- 剑指offer_面试题11 数值的整数次方_考察代码的完整性
- 剑指offer 11. 数值的整数次方
- 剑指Offer之数值的整数次方(题11)
- 【剑指offer】3.3代码的完整性——面试题11:数值的整数次方
- 剑指offer:(11)代码的完整性: 数值的整数次方
- 剑指Offer之面试题11:数值的整数次方
- 剑指Offer面试题11:数值的整数次方 Java实现