【力扣】两数相除(c/c++)
目录
题目
注意:
示例 1:
示例 2:
提示:
题目解析
题目思路
代码思路
数据处理
注意
减法函数
第一次使用的函数
问题
第二次改良后的代码
处理i的值并且返回
总代码
力扣的代码
注意
题目
给你两个整数,被除数
dividend和除数divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(
truncate)其小数部分。例如,8.345将被截断为8,-2.7335将被截断至-2。返回被除数
dividend除以除数divisor得到的 商 。
注意:
假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231, 231 − 1] 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。
示例 1:
输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = 3.33333.. ,向零截断后得到 3 。
示例 2:
输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = -2.33333.. ,向零截断后得到 -2 。
提示:
-231 <= dividend, divisor <= 231 - 1divisor != 0if (dividend == 0)return 0;if (divisor == 1)return dividend;if (divisor == -1){if (dividend > INT_MIN) return -dividend;// 只要不是最小的那个整数,都是直接返回相反数就好啦return INT_MAX;// 是最小的那个整数,都是直接返回最大值}
题目解析
这是一个让你不用除法来实现除法的题目
很奇怪,代码中不能直接或者间接的用除法,乘法,以及求余
题目思路
由于还可以用减法以及加法
这时候可以想到小学的知识
除法的本质就是看在被除数中有几个除数
我们可以用减法来依次减去就可以了
代码思路
越界的情况
首先我们要判断给出的值越界的情况
if (dividend == 0)return 0;if (divisor == 1)return dividend;if (divisor == -1){if (dividend > INT_MIN) return -dividend;// 只要不是最小的那个整数,都是直接返回相反数就好啦return INT_MAX;// 是最小的那个整数,都是直接返回最大值}
数据处理
之后我们判断除数与被除数之间的的符号关系并且记录下来
并且为了方便结算全部取绝对值
long long i = 0;//判断是否异号long long sum_1 = (long long)dividend * divisor;//取绝对值if (dividend < 0)dividend = -dividend;if (divisor < 0)divisor = -divisor;
注意
这里的long long的数据类型是为了防止给出的数据相乘后越界,并且把其中“i”变量的值记录下来用于返回
减法函数
第一次使用的函数
原来是用这个函数的
while (dividend >= divisor){dividend=dividend-divisor;i++}
问题
运行时间可能会慢因为除数是21亿并且除数是2的话要运行10亿次
第二次改良后的代码
while (dividend >= divisor){long long j = 1;long long sum_3 = divisor;while (dividend> sum_3 + sum_3){sum_3 = sum_3 + sum_3;j = j + j;}dividend = dividend - sum_3;i = i + j;}
这个实现方法就是
如果是144除以2第一步执行的是144-64第二步为80-64第三步为16-16
这样运行步骤会大大降低
处理i的值并且返回
if (sum_1 < 0)i = -i;return i;
总代码
可以直接运行的代码
#include <iostream>
using namespace std;
int divide(long long dividend, long long divisor)
{if (dividend == 0)return 0;if (divisor == 1)return dividend;if (divisor == -1){if (dividend > INT_MIN) return -dividend;// 只要不是最小的那个整数,都是直接返回相反数就好啦return INT_MAX;// 是最小的那个整数,都是直接返回最大值}long long i = 0;//判断是否异号long long sum_1 = (long long)dividend * divisor;//取绝对值if (dividend < 0)dividend = -dividend;if (divisor < 0)divisor = -divisor;while (dividend >= divisor){long long j = 1;long long sum_3 = divisor;while (dividend> sum_3 + sum_3){sum_3 = sum_3 + sum_3;j = j + j;}dividend = dividend - sum_3;i = i + j;}if (sum_1 < 0)i = -i;return i;
}
int main()
{//可改传递的数据int a = divide(-2147483648, -3);cout << a << endl;return 0;
}
力扣的代码
力扣提交的代码
class Solution {
public:
int divide(long long dividend, long long divisor)
{if (dividend == 0)return 0;if (divisor == 1)return dividend;if (divisor == -1){if (dividend > INT_MIN) return -dividend;// 只要不是最小的那个整数,都是直接返回相反数就好啦return INT_MAX;// 是最小的那个整数,都是直接返回最大值}long long i = 0;//判断是否异号long long sum_1 = (long long)dividend * divisor;//取绝对值if (dividend < 0)dividend = -dividend;if (divisor < 0)divisor = -divisor;while (dividend >= divisor){long long j = 1;long long sum_3 = divisor;while (dividend> sum_3 + sum_3){sum_3 = sum_3 + sum_3;j = j + j;}dividend = dividend - sum_3;i = i + j;}if (sum_1 < 0)i = -i;return i;
}
};
注意
代码不难,注意越界的数据越界的问题
相关文章:
【力扣】两数相除(c/c++)
目录 题目 注意: 示例 1: 示例 2: 提示: 题目解析 题目思路 代码思路 数据处理 注意 减法函数 第一次使用的函数 问题 第二次改良后的代码 处理i的值并且返回 总代码 力扣的代码 注意 题目 给你两个整数,被除数 dividend 和…...
《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装kubeadm、kubelet和kubectl》
一、背景 由于客户网络处于专网环境下, 使用kubeadm工具安装K8S集群,由于无法连通互联网,所有无法使用apt工具安装kubeadm、kubelet、kubectl,当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载kubeadm、kubele…...
go学习part21 Redis
300_尚硅谷_Redis的基本介绍和原理示意_哔哩哔哩_bilibili Redis 命令 | 菜鸟教程 (runoob.com) 1.基本介绍 2.基本操作 Redis的基本使用: 说明:Redis安装好后,默认有16个数据库,初始默认使用0号库,编号是0...15 1.添加key-val [set] 2.查看当前redi…...
时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比
时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 1.时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测; 2.单变量时间序列数…...
Unity3D下如何采集camera场景数据并推送RTMP服务?
Unity3D使用场景 Unity3D是非常流行的游戏开发引擎,可以创建各种类型的3D和2D游戏或其他互动应用程序。常见使用场景如下: 游戏开发:Unity3D是一个广泛用于游戏开发的环境,适用于创建各种类型的游戏,包括动作游戏、角…...
黑客可利用 Windows 容器隔离框架绕过端点安全系统
新的研究结果表明,攻击者可以利用一种隐匿的恶意软件检测规避技术,并通过操纵 Windows 容器隔离框架来绕过端点安全的解决方案。 Deep Instinct安全研究员丹尼尔-阿维诺姆(Daniel Avinoam)在本月初举行的DEF CON安全大会上公布了…...
STM32注入通道
什么是注入通道? 注入通道是ADC的一种采样方式,主要用于在规则通道转换期间并行处理快速变化信号的采样。注入通道的转换可以在规则通道转换时强行插入,相当于一个“中断通道”。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执…...
WebVR — 网络虚拟现实
推荐:使用 NSDT编辑器 快速搭建3D应用场景 虚拟现实设备 随着Oculus Rift和许多其他生产设备即将上市,未来看起来很光明——我们已经有足够的技术来使VR体验“足够好”,可以玩游戏。有许多设备可供选择:像Oculus Rift或HTC Vive这…...
ASP.NET Core 的 Routing
ASP.NET Core 的 Routing ASP.NET Core 的 controllers 使用Routing 中间件匹配客户端的 url 请求,然后映射到对应的 controller 的处理方法(Action)上。 Actions 可以是 常规路由 或 属性路由 的映射。 MVC App一般使用常规路由。 REST API…...
IBM Spectrum LSF Explorer 为要求苛刻的分布式和任务关键型高性能技术计算环境提供强大的工作负载管理
IBM Spectrum LSF Explorer 适用于 IBM Spectrum LSF 集群的强大、轻量级报告解决方案 亮点 ● 允许不同的业务和技术用户使用单一解决方案快速创建和查看报表和仪表板 ● 利用可扩展的库提供预构建的报告 ● 自定义并生成性能、工作负载和资源使用情况的报…...
RHCE——十一、NFS服务器
NFS服务器 一、简介1、NFS背景介绍2、生产应用场景 二、NFS工作原理1、示例图2、流程 三、NFS的使用1、安装2、配置文件3、主配置文件分析3.1 实验1 4、NFS账户映射4.1 实验24.2 实验3 四、autofs自动挂载服务1、产生原因2、安装3、配置文件分析4、实验45、实验5 一、简介 1、…...
Python编程练习与解答 练习100:随机密码
编写一个生成最忌密码的函数,密码的长度应该在7-10个字符之间。每个字符应该从ASCII表的第33位到126位中随机选择。函数不接受任何参数,返回随机生成的密码作为位移结果。在文件的main程序中显示随机生成的密码。main程序只在解答没有被导入另一个文件时…...
华为云云服务器评测 | 从零开始:云耀云服务器L实例的全面使用解析指南
文章目录 一、前言二、云耀云服务器L实例要点介绍2.1 什么是云耀云服务器L实例2.1.1 浅析云耀云服务器L实例 2.2 云耀云服务器L实例的产品定位2.3 云耀云服务器L实例优势2.4 云耀云服务器L实例支持的镜像与应用场景2.5 云耀云服务器L实例与弹性云服务器(ECS…...
欧科云链研究院探析Facebook稳定币发行经历会不会在PayPal重演
引言 作者最近的报告-探析PayPal发行稳定币是否会重蹈Facebook覆辙-近期被英国的金融时报(中文版)刊登。由于该报告在欧科云链研究院内部反响较好,下面就带大家简单的剖析这篇报告的主要内容。 *这篇文章主要由对比分析(已删减&a…...
docker 容器pip、git安装异常;容器内web对外端口ping不通
1、docker 容器pip、git安装异常 错误信息: git clone https://github.com/vllm-project/vllm.git Cloning into ‘vllm’… fatal: unable to access ‘https://github.com/vllm-project/vllm.git/’: Failed to connect to 127.0.0.1 port 10808: Connection ref…...
SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis
一、背景 在SpringBoot Mybatis 项目中,需要连接 多个数据源,连接多个数据库,需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot&l…...
【JavaScript 16】对象继承 原型对象属性 原型链 构造函数属性 instanceof运算符 继承 多重继承 模块
对象继承 原型对象概述instanceof运算符构造函数的继承多重继承模块 A 对象通过继承 B 对象,就能 直接拥有 B 对象的所有属性和方法(利于代码复用) 大部分面向对象的编程语言都是通过类(class)实现对象的继承 但 传统…...
地下管线三维自动建模软件MagicPipe3D V3.0发布
2023年9月1日经纬管网建模系统MagicPipe3D V3.0正式发布,该版本经过众多用户应用和反馈,在三维地下管线建模效果、效率、适配性等方面均有显著提升!MagicPipe3D本地离线参数化构建地下管网模型(包括管道、接头、附属设施等&#x…...
百度等8家企业首批上线大模型服务;大语言模型微调之道
🦉 AI新闻 🚀 百度等8家企业首批上线大模型服务 摘要:百度、字节、中科院旗下8家企业/机构的大模型通过备案,正式面向公众提供服务。百度旗下AI大模型产品文心一言率先开放,用户可下载App或登录官网体验。百川智能也…...
二、Mycat2 相关概念及读写分离
第三章 Mycat2 相关概念 3.1 概念描述 1、分库分表 按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路 径的分表。 解读:分库:一个电商项目,分为用户库、订单库等等。 分表:一张订单表数据数百万ÿ…...
CausalImpact最佳实践:避免因果推断中的7个常见陷阱
CausalImpact最佳实践:避免因果推断中的7个常见陷阱 【免费下载链接】CausalImpact An R package for causal inference in time series 项目地址: https://gitcode.com/gh_mirrors/ca/CausalImpact 在时间序列分析领域,因果推断是揭示变量间真实…...
CANN Triton排序选择算子优化
Sort/Select 算子优化 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 适用于需要迭代选择元素的算子:NMS、…...
杰理微蓝牙芯片AC696系列入门
1.文章背景 此篇文章以ac696n_soundbox_sdk_v1.7.0版本进行入门讲解: 写这篇文章的目的是因为自己在尝试入门杰理微的时候遇到了好多的问题点,想尝试用买到的开发板来驱动一颗LED闪烁却一直没有按自己想象的逻辑成功跑出效果,在网上到处翻找手…...
读研读博,教你3招搞定文献调研
今天就和大家分享几个我踩坑后总结的高效科研技巧,以及一款能帮你省出大半时间的实用工具——MedPeer的Deep Search。相信每个做科研的人都有过类似的经历:为了找一篇相关文献,翻遍了知网、Web of Science,结果翻了几十页还是找不…...
从选型到设计:手把手教你根据7系列FPGA数据手册做项目选型(以Kintex-7为例)
从选型到设计:手把手教你根据7系列FPGA数据手册做项目选型(以Kintex-7为例) 在硬件系统设计中,FPGA选型往往决定着项目的成败。面对Xilinx 7系列丰富的产品线,工程师需要像外科医生选择手术器械一样精准——既要考虑当…...
Rerank:为什么它是 RAG 效果的分水岭?
在一个典型 RAG 流程中: 很多 Demo 系统会省略中间这一步: 直接把 Top-K 丢给模型 看起来能跑,但一旦进入真实场景,很快就会出现: 命中了,但排在后面噪声太多,污染上下文模型“理解错重点” 本…...
手把手教你用MATLAB图形放大法找方程根:从画图到定位,解决迭代法初值难题
手把手教你用MATLAB图形放大法找方程根:从画图到定位,解决迭代法初值难题 在数值计算的世界里,寻找方程的根就像在黑暗森林中探险——没有地图的指引,盲目选择起点可能导致算法陷入无限循环或收敛到错误解。而MATLAB的图形放大法&…...
C语言assert断言:从核心原理到工程实践的全方位指南
1. 项目概述:为什么assert是C程序员的“随身听诊器” 在C语言的世界里摸爬滚打久了,你肯定遇到过这种场景:程序在开发环境里跑得好好的,一到测试环境就莫名其妙崩溃;或者某个函数昨天还能用,今天加了几行代…...
3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验
3分钟快速上手Inter字体:免费开源字体如何提升你的数字产品体验 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter Inter字体是一款专为屏幕显示设计的开源无衬线字体,凭借其出色的可读性和多语言…...
用8086汇编和8255芯片,手把手带你复刻一个80年代的键盘显示器(含完整代码与接线图)
用8086汇编和8255芯片复刻80年代键盘显示器:一场穿越时空的硬件考古 在数字技术飞速发展的今天,回望上世纪80年代的计算机硬件,就像打开一本泛黄的技术百科全书。那个时代的工程师们,用简单的芯片和精妙的电路设计,构建…...
