特殊的加法和除法(考察点为位操作符)

news2024/12/24 8:45:24

目录

一·简介:

二·例题讲解:

2.1不用加号的加法:

2.1.1题目:

2.1.2思路汇总:

2.1.3代码解答:

2.2两数相除:

2.2.1题目:

2.2.2思路汇总:

2.2.3代码解答:


一·简介:

本篇为两道例题带你用位操作符完成取代加号和除号运算符,满满干活,细细解答,通俗易懂,浑然通透版本。

二·例题讲解:

2.1不用加号的加法:

2.1.1题目:

leetcode 题目链接: . - 力扣(LeetCode)

2.1.2思路汇总:

思路:位操作符配合连用:首先用异或得到没有进位的得数,接着&配合<<得到要进的位,并对应在这个得数下面,后面直接再次异或即相当于进位了,然后这里就要里用循环+

重新赋值了,当再次进位可能会出现还要进位的情况,因此这选择了循环,直到不需要进位即结束,也就是这里对应得到进位的变量是0就可。

如14和5:1110,0101

2.1.3代码解答:

class Solution {
public:
    int add(int a, int b) {
        while(b!=0){
           int ans1=(a^b);//得到未进位的加后的数
           int ans2=(a&b)<<1;//得到要进的位左移相当于给它进位后,下面直接以后即再次未进位相加
            a=ans1;//未进位的数
            b=ans2;//对应进完位的位,后面直接异或
        }
        return a;
    }
};

2.2两数相除:

2.2.1题目:

leetcode原题链接:. - 力扣(LeetCode) 

2.2.2思路汇总:

思路:此题明显是让用位移符,这里要想到<< 有乘^n的作用,而>>有除2^n的作用,因此可以利用这点完成,这里的除法就是把dd转化成2^n(最大)乘一个大于或等于dr的数,那么

我们就可以知道它的余数肯定大于这个2^n,故可以先把这个余数的一部分加上,然后dd减去这部分余数乘dr,也就是求完余数的一部分,转化成另一个数对它得余数了,最后叠加就好

依次重复操作,最后得出即可,这里我们是倒序的因为要得到最大的这个2^n然后可以保证后面重复操作时候这个n一定小于上一次n。

细节问题:最大最小值处理以及正负号

一个式子解释如:17 /2: 2^4/2+1/2==8

2.2.3代码解答:

class Solution {
public:
    int divide(int dividend, int divisor) {
            int count=0;
           if(dividend==0) return 0;
           int flag=1;
           if(dividend==INT_MIN&&divisor==-1) return INT_MAX;//这里如果不这么操作最后返回的是-INT_MIN,超出int限制
           if(dividend==INT_MIN&&divisor==1) return INT_MIN;//这里如果没有,则后面直接abs INT_MIN,直接整型溢出了
           if((dividend^divisor)<0) flag=-1;//判断最后的正负
           long  dd=abs(dividend);
           long  dr=abs(divisor);
           for(int n=31;n>=0;n--){
            if(dd>>n>=dr) {//得到最大的2^n
              count+=1<<n;//叠加这个2^n
              dd-=dr<<n;//下一次用去除得到部分余数的数再次循环,最会叠加count
              
            }
           }
          
          return flag==1?count:-count;
    }
};

以上就是刷题时所遇问题,解答汇总希望对您有助! 

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

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

相关文章

第 13 章 常用类

第 13 章 常用类 文章目录 <center>第 13 章 常用类13.1 包装类13.1.1 包装类的分类13.1.2 包装类和基本数据的转换13.1.3 案例演示13.1.4 课堂测试题13.1.5 包装类型和 String 类型的相互转换13.1.6 Integer 类和 Character13.1.7 Integer 类面试题 113.1.8 Intege 类面…

【算法】0/1背包问题

背包中有一些物品&#xff0c;每件物品有它的价值与重量&#xff0c;给定一个重量&#xff0c;在该重量范围内取物品&#xff08;每件物品不可重复取&#xff09;&#xff0c;求最大价值。 将需求转化为表格&#xff0c;每一行中的每个格子代表可选哪些下标的物品在总重量限额内…

【c++】 模板初阶

泛型编程 写一个交换函数&#xff0c;在学习模板之前&#xff0c;为了匹配不同的参数类型&#xff0c;我们可以利用函数重载来实现。 void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(dou…

Linux开发讲课45--- 链表

Linux内核代码中广泛使用了数据结构和算法,其中最常用的有链表、队列kfifo、红黑树、基数树和位图。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。 链表所包含的元素可以动态创建并插入和删除。链表的每个元素…

AR 领域的突破——微型化显示屏为主流 AR 眼镜铺平道路

概述 多年来&#xff0c;增强现实 (AR) 技术一直吸引着人们的想象力&#xff0c;有望将数字信息与我们的物理世界无缝融合。通过将计算机生成的图像叠加到现实世界的视图上&#xff0c;AR 有可能彻底改变我们与环境的互动方式。从增强游戏体验到协助手术室的外科医生&#xff…

【Linux】进程间关系与守护进程

超出能力之外的事&#xff0c; 如果永远不去做&#xff0c; 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念&#xff0c; 其实每一个进程除了有一个进程 ID(P…

2024/10/2 408 20题

c d d b b a b c b b a d c d a c

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结&#xff1a;在项目当中第一、第二种方法搭配使用&#xff0c;第三种冲突风险非常大&#xff0c;仅适合练习使用。 四、C输入&输出 五、缺省…

【数据库】揭秘Oracle中不朽的scott用户:起源、影响与技术启示

标题&#xff1a;【数据库探秘】揭秘Oracle中不朽的scott用户&#xff1a;起源、影响与技术启示 摘要 本文将带你深入了解Oracle数据库中一个传奇的用户——scott。从scott用户的起源到其在数据库发展中的影响&#xff0c;我们将探索这个经典用户账户背后的故事。此外&#xf…

[动态规划] 二叉树中的最大路径和##树形DP#DFS

标题&#xff1a;[动态规划] 二叉树中的最大路径和##树形DP#DFS 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一 、什么是树形DP 二、题目描述&#xff08;点击题目转跳至题目&#xff09; NC6 二叉树中的最大路径和 算法思路&#xff1a; 讲解与参考代…

SpringCloud-基于Docker和Docker-Compose的项目部署

一、初始化环境 1. 卸载旧版本 首先&#xff0c;卸载可能已存在的旧版本 Docker。如果您不确定是否安装过&#xff0c;可以直接执行以下命令&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…

NeRF2: Neural Radio-Frequency Radiance Fields 笔记

任务&#xff1a;用 NeRF 对无线信号的传播进行建模&#xff0c;建模完成后可以用NeRF网络生成新位置下的信号。生成的信号用于指纹定位、信道估计等下游任务。 核心思路 在视觉 NeRF 的基础上&#xff0c;根据无线信号的特点修改了隐式场模型、渲染函数&#xff0c;网络的输…

C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 一.priority_queue的介绍 优先级队列被实现…

calibre-web的翻译translations

calibre-web的翻译translations Windows安装calibre-web&#xff0c;Python-CSDN博客文章浏览阅读539次&#xff0c;点赞10次&#xff0c;收藏11次。pip install calibreweb报错&#xff1a;error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

Oracle 12c在Windows环境下安装

适合初学者使用的Oracle 12c在Windows环境下安装步骤、参数配置、常见问题及参数调优的详细补充说明。 一、Oracle 12c安装步骤 1. 准备工作 在安装Oracle 12c之前&#xff0c;确保你的系统满足以下要求&#xff1a; 操作系统&#xff1a;Oracle 12c支持的Windows版本包括Wi…

掌控物体运动艺术:图扑 Easing 函数实践应用

现如今&#xff0c;前端开发除了构建功能性的网站和应用程序外&#xff0c;还需要创建具有吸引力且尤为流畅交互的用户界面&#xff0c;其中动画技术在其中发挥着至关重要的作用。在数字孪生领域&#xff0c;动画的应用显得尤为重要。数字孪生技术通过精确模拟现实世界中的对象…

【C++】树形结构的关联式容器:set、map、multiset、multimap的使用

&#x1f33b;个人主页&#xff1a;路飞雪吖~ ✨专栏&#xff1a;C/C 目录 一、set的简单介绍和使用 &#x1f31f;set的介绍 &#x1f525;注意&#xff1a; &#x1f320;小贴士&#xff1a; &#x1f31f;set的使用 ✨set的构造 ✨set的迭代器 ​编辑 ✨set的容量 …

结构光—格雷码构造代码

本篇文章主要给出生成格雷码的代码&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; #include <iostream> #include <fstream> #include <Windows.h>using…

vue2老项目打包优化:优化脚本生成的代码

前言 上次讲到在一个 vue-cli 的老项目中&#xff0c;修改 vue.config.js 的以下参数&#xff0c;将打包时间从 40min &#xff0c;降到了 12min {parallel: true, // 多核处理&#xff0c;按理说默认应该生效&#xff0c;但我的文件被设置成了falseruntimeCompiler: false, …

spring学习日记-day7-整合mybatis

一、学习目标 spring整合MyBatis的原理主要涉及到将MyBatis的Mapper映射文件交由Spring容器管理&#xff0c;并将其注入到MyBatis的SqlSessionFactory中&#xff0c;从而实现两者的整合。 二、整合mybatis 1.写一个mybatis测试案例 项目结构&#xff1a; 1.数据库 CREATE DA…