剑指Offer面试题:10.数值的整数次方

一题目:数值的整数次方二实现思路(1)当指数为负数的时候:可以先对指数求绝对值,然后算出次方的结果之后再取倒数。(2)当底数(base)是零且指数是负数的时候:通过全局代码或异常告诉调用者参

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

一 题目:数值的整数次方

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

二 实现思路

  (1)当指数为负数的时候:可以先对指数求绝对值,然后算出次方的结果之后再取倒数

  (2)当底数(base)是零且指数是负数的时候:通过全局代码或异常告诉调用者参数有误

  (3)0的0次方的时候:由于0的0次方在数学上是没有意义的,因此无论是输出0还是1都是可以接受的。

三 代码实现

#include <math.h>

bool Equal(double num1, double num2)
{
    if (num1 - num2 > -0.0000001 &&
        num1 - num2 < 0.0000001)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 基数为base为double类型,exponent为整数
double Power(double base, int exponent) throw(char *)
{
    // 当底数为0且指数为负数时抛出异常
    if (Equal(base,0.0) && (exponent < 0))
    {
        throw "base must be positive!";
    }
    double dbResult = 1.0;
    if (exponent >= 1)
    {
        for (int i = 0; i < exponent; i ++)
        {
            dbResult *= base;
        }
    }
    else if (exponent < 0)
    {
        for (int j = 0; j < abs(exponent); j ++)
        {
            dbResult *= base;
        }
        dbResult = 1/dbResult;
    }
    else if(exponent == 0)
    {
        dbResult = 1;
    }
    return dbResult;
}

void main()
{
    try
    {
        cout << Power(0,1) << endl;
        cout << Power(2, 3) << endl;
        cout << Power(-2, 3) << endl;
        cout << Power(2, -3) << endl;
        cout << Power(2, 0) << endl;
        cout << Power(0,-1) << endl;
    }
    catch (char *pError)
    {
        cout << pError << endl;
    }
    
    return;
}

剑指Offer面试题:10.数值的整数次方

细节:在判断底数base是不是等于0时,不能直接写base==0,这是
因为在计算机内表示小数时(包括float和double型小数)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围内。如果两个数相差很小,就可以认为它们相等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120164.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python写txt方法_怎么实现python写入txt文件方法

    python写txt方法_怎么实现python写入txt文件方法一、读写txt文件1、打开txt文件1file_handle=open(‘1.txt’,mode=’w’)上述函数参数有(1.文件名,mode模式)mode模式有以下几种:1234#w只能操作写入r只能读取a向文件追加#w+可读可写r+可读可写a+可读可追加#wb+写入进制数据#w模式打开文件,如果而文件中有数据,再次写入内容,会把原来的覆盖掉2、向文件写入数据第一种写入方式:12…

    2022年10月2日
    1
  • js判断属性是否存在(javascript的特点)

    参考一:vararray=[{‘yaxis’:22,’lines’:true},{‘lines’:true}]varisTrue=array.some(val=>{returnval.yaxis})if(isTrue===true){console.log(‘数组对象里面存在属性yaxis’)}1.使用in关键字。该方法可…

    2022年4月12日
    49
  • 面向对象设计

    面向对象设计

    2021年11月28日
    54
  • dropout和bagging_dropout总结「建议收藏」

    dropout和bagging_dropout总结「建议收藏」1.伯努利分布:伯努利分布亦称“零一分布”、“两点分布”。称随机变量X有伯努利分布,参数为p(02.dropout其实也是一种正则化,因为也把参数变稀疏(l1,原论文)和变小(l2,caffe实际实现)。只有极少的训练样本可用时,Dropout不会很有效。因为Dropout是一个正则化技术,它减少了模型的有效容量。为了抵消这种影响,我们必须增大模型规模。不出意外的话,使用Dropout时较佳…

    2022年5月4日
    65
  • pycharm激活码提示Key is invalid.(注册激活)2022.02.14

    (pycharm激活码提示Key is invalid.)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9AAG1RZ8NI-eyJsaWNlb…

    2022年4月1日
    1.4K
  • asp中Session对象的清空[通俗易懂]

    asp中Session对象的清空[通俗易懂]在保存某些多页面共用的变量的时候(如保存用户登陆信息),我们用得最多的就是Session和Cookies了,至于Session怎么使用这里就不说了   ,主要说说Session的清空。   Contents.Remove(\”变量名\”):从Session.cont

    2022年7月15日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号