数值的整数次方
2016-02-28 11:51
337 查看
【题目】
实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同一时候不须要考虑大数问题。
【分析】
此问题非常easy。可是须要重视下面几种情况:
1. exponent < 0 ,结果为整数次方的倒数。
2. exponent = 0, 结果为1;
3. base = 0 && exponent = 0 。 结果为0。本身基底是0 ,0的0次方没有意义。
4. base = 0 && exponent < 0 , 结果为0。
【測试代码】
【输出】
【改善】
为了更高效,当指数为偶数时。是能够求出一半的结果,再乘以本身,为奇数时,将偶数结果再乘以一次基底,这样递归算的话效率能达到O(lgn)
实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同一时候不须要考虑大数问题。
【分析】
此问题非常easy。可是须要重视下面几种情况:
1. exponent < 0 ,结果为整数次方的倒数。
2. exponent = 0, 结果为1;
3. base = 0 && exponent = 0 。 结果为0。本身基底是0 ,0的0次方没有意义。
4. base = 0 && exponent < 0 , 结果为0。
【測试代码】
#include<stdio.h> #define false 0; #define true 1; int g_Invalid_Input ; int equal(double num1, double num2) { if( (num1-num2>-0.0000001) && (num1-num2<0.0000001) ) return true; return false; } double powerwith_unsigned_exponent(double base, unsigned int exponent) { double result = 1.0; for(int i =1 ; i<= exponent; ++i) result*=base; return result; } double power(double base, int exponent) { g_Invalid_Input = false; if(equal(base, 0.0) && exponent <=0) { g_Invalid_Input = true; return 0.0; } unsigned int absExponent = (unsigned int )(exponent); if(exponent < 0) absExponent = (unsigned int)(-exponent); double result = powerwith_unsigned_exponent(base, absExponent); if(exponent < 0) result = 1.0 / result; return result; } void main() { double result1= power(0,0); double result2 = power( 0 ,-1); double result3 = power(2,3); double result4 = power(2,-3); double result5 = power(-2,3); printf("power(0,0) =%f \n",result1); printf("power(0,-1) = %f\n",result2); printf("power(2,3) = %f\n",result3); printf("power(2,-3) = %f\n",result4); printf("power(-2,3) = %f\n",result5); }
【输出】
【改善】
为了更高效,当指数为偶数时。是能够求出一半的结果,再乘以本身,为奇数时,将偶数结果再乘以一次基底,这样递归算的话效率能达到O(lgn)
double powerwith_unsigned_exponent(double base, unsigned int exponent) { if(exponent == 0) return 1; if(exponent == 1) return base; double result = powerwith_unsigned_exponent(base, exponent>>1); result *= result; if(exponent & 0x1 ==1) result *= base; return result; }
相关文章推荐
- java基础--相等
- 2960忘记密码解决方案
- NOJ——1659求值(log10取对数+floor取整数部分+可有可无的快速幂)
- wamp环境的配置
- [转载] 动态链接库dll的 静态加载 与 动态加载
- OpenLayers根据两点连线
- 相关技术笔记
- 移动互联网时代来临
- java练习3,去除容器中自定义的重复对象
- BitmapUtils的相关知识
- mpeg4ip.h:126: error: new declaration ‘char*
- this 和 super用法
- LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- <<第一行代码>>--根据程序当前界面判断是哪一个Activity
- 作为上帝,不要忘记奖励一下好人
- Fragment 的静态方式和动态方式以及动态方式中fragment之间通过activity传递 数据(接口回调 ):
- swap分区
- PAT (Top Level) Practise 1001 Battle Over Cities - Hard Version (35)
- python 写的一个爬虫程序源码
- HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例