zoukankan      html  css  js  c++  java
  • 数值的整数次方

    1. 考虑各种情况  (是一种情况多的题)

    // 面试题:数值的整数次方
    // 题目:实现函数double Power(double base, int exponent),求base的exponent
    // 次方。不得使用库函数,同时不需要考虑大数问题。

    考虑全局变量来标志异常

    注意不能直接判断 double 类型的数据==0;  是有精度的!!!应该用equal  自己写或者调用c库的,但是C库好像有的时候不能用

         bool g_validoutput;//用来标志异常
         double Power(double base, int exponent)
         {
           g_validoutput=false;//初始值 代表没什么异常!!!
            
             if(equal(base, 0.0)&&exponent<0)//0的负多少次方  除数是0,异常
             {  
               g_validoutput=true;  //代表此处是异常
               return 0.0;//并且不耽误输出!!
             
             } 
             //每次都输入它  正数的话他不变
             unsigned int Exponent=(unsigned int)exponent;//初始化为无符号的exponent
             
             if (exponent<0)//次方是负数
             Exponent=-exponent;//变成了正的; 
            
             double result=Powersolve(base,Exponent);//求结果
             
             if (exponent<0)//次方是负数
             result=1.0/result;
             
             return result;
     
         }
         

    //效率低下 double Powersolve(double base, int exponent)//正常情况下的运算 { double result= 1.0; for(int i=1;i<=exponent;i++) { result*=base; } return result; } //类似之前的斐波那契函数里一个计算方式 double Powersolve(double base, unsigned int exponent)//计算base不为0,exponent为非负数情况下的幂值 { if (exponent == 0) return 1; if (exponent == 1) return base; double result = PowerWithUnsignedExponent(base, exponent >> 1);//使用右移作为除2操作,会很快,exponent为正,所以不怕右移 result *= result; if ((exponent & 0x1) == 1)//使用与操作判断是否是奇数,也是一种加速优化操作 result *= base; return result; } bool equal(double num1,double num2)//由于精度原因,不能用==,必须让二者差在一个很小范围内就算相等 { if((num1-num2>-0.000001)&&(num1-num2)<0.000001) return true; else return false; }
  • 相关阅读:
    RHEL7挂载ISO做本地yum
    服务器虚拟化架构突出优势
    国内公共DNS
    世界上最小的发行版之一Tiny Core
    VMware v12.1.1 专业版以及永久密钥
    Webbench网站压力测试
    Web.xml配置详解之context-param
    SpringMvc自动代理
    SpringMvc aop before
    SpringMvc 面向切面1
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11378640.html
Copyright © 2011-2022 走看看