剑指offer题11_数值的整数次方
2018-01-19 15:10
393 查看
一.题目:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。二.分析:
1.注意代码的规范性和完整性。(1)需要考虑指数是负数的情况;
(2)需要考虑底数为0且指数为负数的情况;
(3)考虑到0的0次方是没有意义的,结果为0或1均可。
2.乘方函数的实现上,可以底数循环乘法,但是效率并不是很好,更好的思路如下图,并可通过地柜实现。
三.答案:
#include <stdio.h> bool g_InvalidInput = false; bool equal(double a, double b) { if ((a - b > -0.0000001) && (a - b < 0.0000001)) { return true; } else { return false; } } double powerWithUnsignedExponent(double base, unsigned int exponent) { double result = 1.0; for (int i = 1; i <= exponent; i++) { result *= base; } return result; } double powerWithUnsignedExponent_2(double base, unsigned int exponent) { if (exponent == 0) { return 1; } if (exponent == 1) { return base; } double result = powerWithUnsignedExponent_2(base, exponent >> 1); result *= result; if (exponent & 0x1 == 1) { result *= base; } return result; } double power(double base, int exponent) { g_InvalidInput = false; if (equal(base, 0.0) && exponent < 0) { g_InvalidInput = true; return 0.0; } unsigned int absExponent = (unsigned int) exponent; if (exponent < 0) { absExponent = (unsigned int)(-exponent); } double result = powerWithUnsignedExponent_2(base, absExponent); if (exponent < 0) { result = 1.0 / result; } return result; } int main() { printf("pow(2, 4) = %lf\n", power(2, 4)); return 0; }
四.相关题目:
1.剑指offer题49:“把字符串转换为整数”要求实现库函数atoi的功能。相关文章推荐
- 剑指offer:(11)代码的完整性: 数值的整数次方
- 剑指Offer之面试题11:数值的整数次方
- 剑指offer----面试题11:数值的整数次方
- 【剑指offer】3.3代码的完整性——面试题11:数值的整数次方
- 剑指offer面试题11之求数值的整数次方
- 剑指offer_面试题11_数值的整数次方(*)
- 剑指offer——面试题11:数值的整数次方
- 剑指Offer面试题11[数值的整数次方]
- 剑指Offer----面试题11:数值的整数次方
- 剑指offer之面试题11数值的整数次方
- 剑指Offer面试题11数值的整数次方
- 剑指Offer-11.数值的整数次方
- 剑指offer 11 数值的整数次方
- 【剑指Offer学习】【面试题11 :数值的整数次方】
- C++剑指offer_面试题11_数值的整数次方(*)
- 剑指offer 面试题11 数值的整数次方
- 剑指Offer面试题11(Java版):数值的整数次方
- 剑指Offer面试题11(Java版):数值的整数次方
- 剑指offer面试题11 数值的整数次方 java实现
- 剑指offer-面试题11.数值的整数次方