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

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

        在写代码的时候要考虑完全各种情况,对于代码的完整性,从三个方面考虑:功能、边界、负面,同时还要考虑对于异常的处理。在这道题中,主要有下面几个方面需要考虑:

       (1)底数为0,指数为负,0不能做除数;

     (2)底数为0,指数为0,没有意义,要根据实际情况决定为0还是为1;

     (3)底数正常,指数为负;

     1 #include<iostream>
     2 //全局变量,用来标识异常,若底数为0,指数为负,变量值置true
     3 bool g_InvalidInput = false;
     4 
     5 //判断浮点数是否相等,计算机表示float和double都有误差,不能直接用==判断
     6 bool m_equal(double num1,double num2){
     7     if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))
     8         return true;
     9     return false;
    10 }
    11 
    12 double PowerWithUnsignedExponent(double base,int exponent){
    13     double result = 1.0;
    14     for(int i=1;i<=exponent;i++){
    15         result*=base;
    16     }
    17     return result;
    18 }
    19 
    20 double Power(double base,int exponent){
    21     g_InvalidInput = false;
    22     //底数为0,指数为负定为异常
    23     if(m_equal(base,0.0)&&exponent<0){
    24         g_InvalidInput = true;
    25         return 0.0;
    26     }
    27     unsigned int unsignedexponent = (unsigned int)exponent;
    28     if(exponent<0)
    29         unsignedexponent = (unsigned int)(-exponent);
    30 
    31     double result = PowerWithUnsignedExponent(base,unsignedexponent);
    32     if(exponent<0)
    33         result = 1.0/result;
    34     return result;
    35 }
    36 
    37 int main(){
    38     double base;
    39     int exponent;
    40     while(std::cin>>base>>exponent){
    41         std::cout<<Power(base,exponent)<<std::endl;
    42     }
    43     return 0;
    44 }

        对于上面的程序,在PowerWithUnsignedExponent函数上还可以做优化,如果exponent为偶数如16,16次方是8的平方,以此类推,用递归实现;如果为奇数,先提出一个base,再做递归。

     1 double PowerWithUnsignedExponent(double base,unsigned int exponent){
     2     if(exponent == 0)
     3         return 1;
     4     else if(exponent == 1)
     5         return base;
     6     double result = PowerWithUnsignedExponent(base,exponent>>1);
     7     result*=result;
     8     if(exponent & 0x1 == 1)
     9         result*=base;
    10 
    11     return result;
    12 }
  • 相关阅读:
    典型并发任务
    第九章使用共享变量实现并发
    第八章goroutine和通道
    第七章接口
    第六章方法
    第一章
    第四章复合数据类型
    第三章基础数据类型
    Django其他
    VUE学习日记(五) ---- 组件定义 component
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5776637.html
Copyright © 2011-2022 走看看