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; }
  • 相关阅读:
    centos安装MySQL5.7
    centos搭建ftp服务器的方法
    centos 7 卸载 mariadb 的正确命令
    MySQL5.7关于密码二三事
    第四次:渗透练习,xss学习
    第三次靶场练习:通过抓包,绕过内部限制
    第二次靶场练习:cookie注入
    第一次靶场练习:SQL注入(1)
    Linux用户和组管理
    Linux基础命令(三)
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11378640.html
Copyright © 2011-2022 走看看