【力扣】两数相除(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 - 1
  • divisor != 0
    	if (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;
}
};

注意

代码不难,注意越界的数据越界的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Comparable、Comparator接口返回值决定顺序的问题

Comparable和Comparator接口都是实现集合中元素的比较、排序的&#xff0c;下面先简单介绍下他们的用法。 1. 使用示例 public class Person {private String name;private Integer age;public Person() {}public Person(String name, Integer age) {this.name name;this.ag…

【UE】Texture Coordinate 材质节点

目录 一、简介 二、属性介绍 &#xff08;1&#xff09;参数&#xff1a;U平铺 &#xff08;2&#xff09;参数&#xff1a;V平铺 &#xff08;3&#xff09;参数&#xff1a;解除镜像U &#xff08;4&#xff09;参数&#xff1a;解除镜像V 三、 节点构成原理 四、初级…

基于YOLOV8模型的农作机器和行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的农作机器和行人目标检测系统可用于日常生活中检测与定位农作机和行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…

统一网关Gateway

文章目录 概览网关的作用搭建网关断言工厂路由过滤器全局过滤器案例 过滤器执行顺序跨域问题 概览 网关的作用 搭建网关 断言工厂 路由过滤器 全局过滤器 案例 过滤器执行顺序 跨域问题

DB2 HADR+TSA运维,TSA添加资源组的命令

Tivoli System Automation&#xff08;TSA&#xff09;是一个高可用性集群管理软件,DB2 TSAHADR高可用方案可以实现DB2 hadr主备的自动检测切换。本文详细介绍了TSA的常用命令&#xff0c;如何把CDC或者DSG添加到TSA集群中&#xff0c;以及TSA的错误分析方法 常用命令&#xf…

论文阅读:Distortion-Free Wide-Angle Portraits on Camera Phones

论文阅读&#xff1a;Distortion-Free Wide-Angle Portraits on Camera Phones 今天介绍一篇谷歌 2019 年的论文&#xff0c;是关于广角畸变校正的。 Abstract 广角摄影&#xff0c;可以带来不一样的摄影体验&#xff0c;因为广角的 FOV 更大&#xff0c;所以能将更多的内容…

2006 - MySQL server has gone away

解决方法&#xff1a; 1、修改my.cnf配置文件 vim my.cnf 添加如下配置 wait_timeout288000 interactive_timeout 288000 max_allowed_packet100M 解释&#xff1a; wait_timeout&#xff1a;服务器关闭交互式连接前等待活动的秒数 interactive_timeout&#xff1a;服务器关闭…

单片机的ADC

如何理解ADC。ADC就是将模拟量转换成数字量的过程&#xff0c;就是转换为计算机所能存储的0和1序列&#xff0c;比如将模拟量转换为一个字节&#xff0c;所以这个字节的大小要能反应模拟量的大小&#xff0c;比如一个0-5V的电压测量量&#xff08;外部输入电压最小0V,最大为5V&…

websocket基础

下面就以代码来进行说明 1&#xff0c;先导入websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.编写websocket相关bean管理配置 Config…

【ES6】迭代器Iterator

JavaScript中的Iterator是一种特殊对象&#xff0c;它允许我们访问并操作对象的每一个元素。Iterator对象由具有next方法的对象创建&#xff0c;next方法返回一个包含两个属性的对象&#xff1a;value和done。value属性是当前元素的值&#xff0c;done属性是一个布尔值&#xf…

Unity生命周期函数

1、Awake 当对象&#xff08;自己这个类对象&#xff0c;就是这个脚本&#xff09;被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活&#xff08;这个勾&#xff09; 想要当一个对象&#xff08;游戏…

【杂言】写在研究生开学季

这两天搬进了深研院的宿舍&#xff0c;比中南的本科宿舍好很多&#xff0c;所以个人还算满意。受台风 “苏拉” 的影响&#xff0c;原本的迎新计划全部打乱&#xff0c;导致我现在都还没报道。刚开学的半个月将被各类讲座、体检以及入学教育等活动占满&#xff0c;之后又是比较…

ZDH-权限模块

本次介绍基于ZDH v5.1.2版本 目录 项目源码 预览地址 安装包下载地址 ZDH权限模块 ZDH权限模块-重要名词划分 ZDH权限模块-菜单管理 ZDH权限模块-角色管理 ZDH权限模块-用户配置 ZDH权限模块-权限申请 项目源码 zdh_web: GitHub - zhaoyachao/zdh_web: 大数据采集,抽…

ROS 2官方文档(基于humble版本)学习笔记(一)

ROS 2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;一&#xff09; 一、安装ROS 2二、按教程学习1.CLI 工具配置环境使用turtlesim&#xff0c;ros2和rqt安装 turtlesim启动 turtlesim使用 turtlesim安装 rqt使用 rqt重映射关闭turtlesim 由于市面上专门…

关于 MySQL、PostgresSQL、Mariadb 数据库2038千年虫问题

MySQL 测试时间&#xff1a;2023-8 启动MySQL服务后&#xff0c;将系统时间调制2038年01月19日03时14分07秒之后的日期&#xff0c;发现MySQL服务自动停止。 根据最新的MySQL源码&#xff08;mysql-8.1.0&#xff09;分析&#xff0c;sql/sql_parse.cc中依然存在2038年千年虫…

java八股文面试[多线程]——Synchronized优化手段:锁膨胀、锁消除、锁粗化和自适应自旋锁

1.锁膨胀 &#xff08;就是锁升级&#xff09; 我们先来回顾一下锁膨胀对 synchronized 性能的影响&#xff0c;所谓的锁膨胀是指 synchronized 从无锁升级到偏向锁&#xff0c;再到轻量级锁&#xff0c;最后到重量级锁的过程&#xff0c;它叫锁膨胀也叫锁升级。 JDK 1.6 之前…

MATLAB中mod函数转化为C语言

背景 有项目算法使用matlab中mod函数进行运算&#xff0c;这里需要将转化为C语言&#xff0c;从而模拟算法运行&#xff0c;将算法移植到qt。 MATLAB中mod简单介绍 语法 b mod(a,m) 说明 b mod(a,m) 返回 a 除以 m 后的余数&#xff0c;其中 a 是被除数&#xff0c;m 是…

详解Vue中的render: h => h(App)

声明:只是记录&#xff0c;会有错误&#xff0c;谨慎阅读 我们用脚手架初始化工程的时候&#xff0c;main.js的代码如下 import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({// 把app组件放入容器中render: h > h(App), }).$mount(#ap…

sql查找最晚一天/日期最大的一条记录 两种方法

例&#xff1a;查找最晚入职员工的所有信息 建表&#xff1a; CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender char(1) NOT NULL, hire_date date NOT NULL, PRIMA…

FPGA 学习笔记:Vivado 工程管理技巧

前言 当前使用 Xilinx 的 FPGA,所以需要熟悉 Xilinx FPGA 的 开发利器 Vivado 的工程管理方法 这里初步列举一些实际 Xilinx FPGA 开发基于 Vivado 的项目使用到的工程的管理技巧 代码管理 做过嵌入式软件或者其他软件开发的工程技术人员,都会想到使用代码管理工具,如 SVN 、…