剑指Offer--面试题11 数值的整数次方
2016-05-25 21:55
411 查看
剑指Offer--面试题11 数值的整数次方
原书位置:P90;
题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
C++实现:
思考:
1、输入参数边界+异常考虑;(如:0的0次方无意义,return 0或1均可;指数为负数等)
2、简单题则考虑效率+细节优化;(如:减少循环次数;位运算的使用等)
原书位置:P90;
题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
C++实现:
/* 题11:数值的整数次方 要求:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 */ #include <iostream> using namespace std; bool Equals(double fir, double sec) { if ((fir - sec) <= 0.000000001 && (fir - sec) >= -0.000000001) { return true; } else { return false; } } double _GetPower(double base, unsigned int absExponent) { if (absExponent == 1) // 递归终止条件 { return base; } else if (absExponent == 0) // 参数非0判断(只第一次调用需要) { return 1; } double result = _GetPower(base, absExponent >> 1); // 右移1位相当于除以2 result *= result; if (absExponent & 0x1 == 1) // 按位与 运算判断是否为奇数 { result *= base; } return result; } double GetPower(double base, int exponent) { if (Equals(base, 0.0) || Equals(base, 1.0)) return base; unsigned int absExponent = (unsigned int)exponent; if (exponent < 0) { absExponent = (unsigned int)(-exponent); } double result = _GetPower(base, absExponent); if (exponent < 0 && !Equals(result, 0.0)) { result = 1 / result; } return result; } int main(int argc, char *argv[]) { double base = 0.0; int exponent = 0; cin >> base >> exponent; cout << GetPower(base, exponent) << endl; system("pause"); return 0; }
思考:
1、输入参数边界+异常考虑;(如:0的0次方无意义,return 0或1均可;指数为负数等)
2、简单题则考虑效率+细节优化;(如:减少循环次数;位运算的使用等)
相关文章推荐
- IT面试
- 多线程笔试面试总结(一)
- 程序员的知识管理
- 面试题30
- web前端细节性问题(面试时可能遇到的问题)——div+css(2)
- 面试题:一个数组插入另一个数组指定的位置
- [转载]115个Java面试题和答案
- Android面试题集锦
- iOS经典面试题(转)
- 尝试解析js面试题(二)
- 尝试解析js面试题(一)【转发】
- 奋斗吧,程序员——第四十四章 八百里分麾下炙,五十弦翻塞外声
- 面试题目——《剑指Offer》
- android 面试
- 操作系统常见面试题
- 如何准备机器学习工程师的面试 ?
- PHP面试题,附答案(1)
- 【机器学习】程序员初学机器学习的四种方式
- 面试题29
- 成为高效程序员的几大搜索技巧