面试题------数值整数次方
来源:互联网 发布:海地软件 编辑:程序博客网 时间:2024/06/05 15:23
问题要求
实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要靠考虑大数问题。
问题分析
看到这个问题,我觉得我跟大多数人想的是一样,直接循环作乘法。但是仔细一想,考虑的还是太少了。从底数和指数两方面分别考虑:
有这么几种情况我们不容忽视,1)对0求倒数出现异常,要做特殊处理;2)0的0次方是没有任何意义的,需要做特殊处理;3)复次幂即将指数求绝对值,然后再将最后的结果取倒数即可。
仔细阅读题目就会发现,题目要求底数类型是double型的,那么在判断底数是不是等于0时,不能直接判断base == 0.(计算机在表示小数时都有误差)。判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围中。所以将该判断方法封装成一个函数即可 bool equal(double x,double y);
代码如下:
//全局变量用来标识出错是因为底数为0且指数为负数的情况bool InvaildeInput = false;//判断两个小数是否相等bool equal(double x,double y){if ((x - y > -0.0000001) && (x - y < 0.0000001))return true;elsereturn false;}//计算指数为正整数时的整数次方double PowerUnsignedExponent(double base,unsigned int exponent){double result = 1.0;for(unsigned int i = 1; i <= exponent; i++){result *= base;}return result;}double Power(double base,int exponent){InvaildeInput = false;if (equal(base,0.0) && exponent < 0){InvaildeInput = true;return 0.0;}unsigned int UnsignedExponent = (unsigned int)exponent;if (exponent < 0){UnsignedExponent = (unsigned int)(-exponent);}double result = PowerUnsignedExponent(base,UnsignedExponent);if (exponent < 0){result = 1.0 / result;}return result;}
问题总结
在此基础上,还有使用位运算来优化该算法的方法。这里并没有讨论,还是想说要多思考,多写。
0 0
- 面试题------数值整数次方
- 面试题11:数值的整数次方
- 【面试题十一】数值的整数次方
- 面试题11 数值的整数次方
- 面试题11:数值的整数次方
- 面试题11-数值的整数次方
- 面试题11数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- 面试题:数值的整数次方
- 面试题11:数值的整数次方
- 【面试题11】数值的整数次方
- 面试题11:数值的整数次方
- 面试题11:数值的整数次方
- Java反射机制详解
- 用C#来学习唐诗三百首和全唐诗
- java对象在set属性时为什么不更新数据库
- 游戏人生----序章
- 基于Three.js的360X180度全景图预览插件
- 面试题------数值整数次方
- HTTP与HTTPS的区别
- Proxy 最短路 反向建图
- There is already '******' bean method
- jQuery 选择器 _ 菜鸟教程
- Windows Shell 编程学习总结
- Android Studio 真机调试注意
- SOAPUI作为测试端测试接口调用
- 图像滤波基础一