当前位置: 首页 > news >正文

数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
基本思想:首先考虑一下所有可能的情况,以及边界条件。
1. 指数为正数,正常算出次方的结果。
2. 指数为负数的一般情况:先对指数求绝对值,然后算出次方的结果,再取倒数。
3. 指数为负数的特殊情况:底数为0。
4. 指数为0,底数为0的情况。
 
在这里,设置了一个全局变量global来标识是否出错。当输入值为非法输入时,返回值为0,将global的值值为true。正常的返回值为0的情况下 ,global的值为false;
另外,判断底数base是不是等于0时,不能直接写成base == 0,因为在计算机内表示小数时都有误差。判断两个小数是否相等,只能判段它们之差的绝对值是不是在一个很小的范围内。如果两个数的差值很小,就可以认为他们相等。这也是equal()函数存在的意义。
#include <iostream>
#include <algorithm>
#include "string.h"
#include "stdio.h"
#include <vector>
#include <deque>
#include <stack>
#include <map>
#include <utility>
#include "math.h"
using namespace std;
bool global = false;
class Solution {
public:
    double Power(double base, int exponent) {
        if(base == 0.0&&exponent == 0.0)
            return 0.0;
        unsigned int absexponent = (unsigned int) (exponent);
        if(exponent<0)
        {
            if(equal(base,0.0))
            {
                global = true;
                return 0.0;
            }
            absexponent = (unsigned int)(-exponent);
        }
        double result = PowerExponent(base,absexponent);
        if(exponent<0)
            result = 1.0/result;
        return result;
    }

    double PowerExponent(double base,int absexponent)
    {
        double result = 1.0;
        for(int i=0;i<absexponent;i++)
        {
            result*=base;
        }
        return result;
    }

    bool equal(double num1,double num2)
    {
        if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))
            return true;
        else
            return false;
    }
};
int main()
{
    Solution solution;
    double count = solution.Power(0,-1);
    cout<<count<<endl;
    cout<<global<<endl;
}

 

 

转载于:https://www.cnblogs.com/omelet/p/6653100.html

相关文章:

  • 编写高质量iOS与OS X代码的52个有效方法(二)
  • LAMP下安装zabbix流水
  • Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务
  • 自适应滤波:最小均方误差滤波器(LMS、NLMS)
  • JVM笔记
  • 游戏化思维:从工具到玩具
  • Python之递归函数
  • Intent 介绍
  • java算法面试题:递归算法题2 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?...
  • CodePlex关闭,建议迁移至GitHub
  • Hive安装和配置
  • SWFObject是什么
  • CSS3动画@keyframes
  • 微信小程序实例
  • Merge Two Sorted Lists
  • hexo+github搭建个人博客
  • 时间复杂度分析经典问题——最大子序列和
  • CSS 提示工具(Tooltip)
  • ECS应用管理最佳实践
  • extract-text-webpack-plugin用法
  • Java IO学习笔记一
  • React16时代,该用什么姿势写 React ?
  • Vue实战(四)登录/注册页的实现
  • 理清楚Vue的结构
  • 微信支付JSAPI,实测!终极方案
  • 我建了一个叫Hello World的项目
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ionic异常记录
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #QT(智能家居界面-界面切换)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (javascript)再说document.body.scrollTop的使用问题
  • (zhuan) 一些RL的文献(及笔记)
  • (五)Python 垃圾回收机制
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***监测系统的构建(chkrootkit )
  • **python多态
  • .dwp和.webpart的区别
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • :O)修改linux硬件时间
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [\u4e00-\u9fa5] //匹配中文字符
  • [100天算法】-实现 strStr()(day 52)
  • [20150707]外部表与rowid.txt
  • [BJDCTF2020]The mystery of ip
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)