zoukankan      html  css  js  c++  java
  • 【剑指offer】的功率值

    标题叙述性说明:


           实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数。同一时候不须要考虑大数问题。


    分析描写叙述:


           对于实现一个函数,首先要做的就是全面考虑它的參数的所有可能。对于此题中的数值函数,应该考虑的參数有整数、0、负数、浮点型、整型、是不是大数问题等。

           假设exponent是负数,则所求的幂函数中。base不能是0。否则就会出现0做除数的问题。对于这样的错误,能够通过指定标志的方法给出

    假设exponent是负数。应该求base的(-exponent)的幂数的倒数。另外,假设base为0.0,exponent也为0时,没有意义,

    int flag = 0;//标志位,假设base和exponent都为0时,设置该位
    
    double power(double base, int exponent)
    {
    	if(equal(base, 0.0) && exponent < 0){/*此处不能简单的用base == 0.0来比較*/
    		flag = 1;
    		return 0.0;	
    	}
    
    	unsigned int absexponent = (unsigned int)exponent;
    	if(exponent < 0)
    			absexponent = (unsigned int)(-exponent);/*假设exponent小于零,求它的绝对值*/
    
    	double result = PowerWithUnsignedExponent(base, absexponent);
    	if(exponent < 0)
    			result = 1.0 / result;
    
    	return result;
    }
    
    double PowerWithUnsignedExponent(double base, unsigned int absexponent)
    {
    	double result = 1.0;
    	int i;
    	for(i = 1; i <= absexponent; ++i)
    			result *= base;
    
    	return result;
    }
    
    int equal(double num1, double num2)
    {
    	if((num1 - num2 > -0.0000001) /*比較两个浮点数是否相等的方法*/
    			&&(num1 - num2) < 0.0000001)
    		return 1;
    

              上面的方法尽管能解决这个问题,但并不高效。假设exponent比較大,能够用第二种方法解决:

    double PowerWithUnsignedExponent(double base, unsigned int absexponent)
    {
    	if(absexponent == 0)
    		return 1;
    	if(absexponent == 1)
    		return base;
    
    	double result = PowerWithUnsignedExponent(base, absexponent >> 1);
    	result * = result;
    	if(absexponent & 0x1 == 1)
    		result *= base;
    
    	return result;
    }
    

           总结:上述程序所使用了错误的方法的第一段:全局变量的方法。还有另外两个办公事务处理方法:回报值法国、异常处理方法。

  • 相关阅读:
    分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装
    redis整合spring(redisTemplate工具类)
    架构之路之spring+redis的集成
    java之redis篇(spring-data-redis整合)
    Redis 安装
    java对redis的基本操作
    mybatis 详解(九)------ 一级缓存、二级缓存
    mybatis 详解(八)------ 懒加载
    mybatis 详解(七)------一对一、一对多、多对多
    mybatis 详解(六)------通过mapper接口加载映射文件
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4606043.html
Copyright © 2011-2022 走看看