不用加减乘除做加法

1.题目:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

数据范围:两个数都满足 −10≤�≤1000−10≤n≤1000
进阶:空间复杂度 �(1)O(1),时间复杂度 �(1)O(1)

题目链接:不用加减乘除做加法_牛客题霸_牛客网

2.简单介绍加法原理:

先来看看十进制的加法原理:

在计算十进制的加法时,我们将相同数位对其,然后进行10以内的加法,如果满10,我们就往前进1

同理,二进制的加法原理也是类似的:

在计算二进制的加法时,我们也是将相同数位对其,然后进行2以内的加法,如果满2,我们就往前进1

3.怎么知道是否该进位以及怎么进位和怎么得到结果

3.1怎么知道是否该进位

1.在计算机语言中,每一个数字都有自己的源码反码补码,而这些源码反码补码都是以二进制的方式呈现的

2.在二进制中,所有的数都是由0和1组成的,比如3的二进制数为11,4的二进制数为100

3.在C语言中位操作符  &(按位与)的作用是如果两个数的二进制的相同数位都为1结果才为1,否则为0

3.2怎么进位呢

1.这里会使用到左移操作符<<

左移操作符就是二进制数向左移动,右侧补0

列如:01101左移一位就是11010

2.   10101&11011=10001,10001<<1=100010

3.3怎么得到结果

1.除了知道了该进位的数位,也要知道不需要进位的数位

2.怎么获得不需要进位的数位呢?

   这里要使用按位异或操作符^

   我们知道当两个加数对应数位都为1或0时,结果的对应数位为0,只有当两个对应数位只       有一个1时,结果的对应数位才为1.(没考虑加上进位的情况)

这里我们得到了不需要进位的数位上的数,然后我们用这个数加上进位的那个数

虽然我们用进位的数加上不需要进位的数,但是我们发现在两者进行相加时还会出现进位的情况,这个怎么处理呢?

很简单,只要我们重复之前的操作,直到进位的数为0时,就不需要进位了

后面就只需要写个递归或者循环就可以了

4.来看代码实现

1.递归版

int Add(int num1, int num2 ) {   //当我们一进来就把num2当做进位的那个数
if(num2==0)//我们将进位的数存在num2中,不需要进位的数存在num1中
return num1;//当不需要进位时,num1就为两个数的和
else
 return Add(num1^num2,(num1&num2)<<1);//如果需要进位,我们就重复之前的操作
}

2.循环版

int Add(int num1, int num2 ) {
while(num2!=0)//num2依然是存进位的,num1是不需要进位的
{
int tmp=num1;//因为下面num1^=num2会改变之前获得的num1,所以需要提前保留一份num1的值
num1^=num2;
num2=(tmp&num2)<<1;
}
return num1;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod&#xff1f;Pod在K8S集群中的使用方式&#xff1f; 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器&#xff08;infrastructure container&#xff09; 2.2.2…

抽象的java

Consider defining a bean of type org.springframework.mail.MailSender in your configuration. 报错原因&#xff1a; 第一个&#xff1a;未安装对应的依赖 第二个&#xff1a;对应配置问题 背景&#xff1a;用springboot-java完成邮箱发送 第一个问题解决方法&#xff1…

Java 基于微信小程序的农产品自主供销小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

多进程-day3

1、使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源 #include<myhead.h> int get_file_len(const char *srcfile,const char *destfile); int copy_file(const char *srcfile,const char *de…

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

5 buuctf解题

命令执行 [BJDCTF2020]EasySearch1 打开题目 尝试弱口令&#xff0c;发现没有用 扫描一下后台&#xff0c;最后用御剑扫描到了index.php.swp 访问一下得到源码 源码如下 <?phpob_start();function get_hash(){$chars ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu…

虚拟机服务器中了lockbit3.0勒索病毒怎么办,lockbit3.0勒索病毒解密数据恢复

在这个网络飞速发展的时代&#xff0c;企业的生产运营得到了极大提升&#xff0c;越来越多的企业更加依赖网络的力量开展工作与业务&#xff0c;网络也为企业的生产运营提供了极大便利&#xff0c;但网络是一把双刃剑&#xff0c;在为人们提供便利的同时&#xff0c;也为企业的…

TikTok直播网络不稳定是什么原因

在当今社交媒体平台中&#xff0c;TikTok以其独特的视频内容和社交互动功能而备受欢迎。然而&#xff0c;尽管TikTok为用户提供了直播功能&#xff0c;但一些用户可能会遇到TikTok直播网络不稳定的问题。那么&#xff0c;TikTok直播网络不稳定的原因是什么呢&#xff1f;以下是…

uni-app nvue vue3 setup中实现加载webview,解决nvue中获取不到webview实例的问题

注意下面的方法只能在app端使用&#xff0c; let wv plus.webview.create("","custom-webview",{plusrequire:"none", uni-app: none, width: 300,height:400,top:uni.getSystemInfoSync().statusBarHeight44 }) wv.loadURL("https://ww…

16. BI - 推荐系统之 ALS 实现

本文为 「茶桁的 AI 秘籍 - BI 篇 第 16 篇」 文章目录 对 MovieLens 进行电影推荐 Hi,你好。我是茶桁。 前面两节课的内容中&#xff0c;我们从矩阵分解到 ALS 原理&#xff0c;依次给大家讲解了推荐系统中的一个核心概念。 矩阵分解中拆矩阵的背后其实是聚类。就说 k 等于几…

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池&#xff0c;之前的电池容量明显变小了很多&#xff0c;而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中&#xff0c;您可以通过以下步骤来查看笔记本电脑电池的健康状况&#xff1a; 打开命令提示符&…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第24套

少儿编程 蓝桥杯青少组科技素养题真题及解析第24套 1、A市和B市决定联合建造一个邮件集散中心用于将来自其他地区的邮件运送至两个城市。A 市每周会收到 4000 份邮件&#xff0c;B 市每周会收到 6000 份邮件。假设运送邮件的时间与集散中心距离城市的距离成正比&#xff0c;A市…

sentinel整合nacos在gateway中实现限流

sentinel整合nacos在gateway中实现限流 一、应用层面完成网关整合nacos和sentinel实现限流 前沿 启动nacos与sentinel的jar的启动&#xff0c;这里不细讲 sentinel官网 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下载地址 https://github.com/…

最简单的基于 FFmpeg 的编码器 - 纯净版(不包含 libavformat)

最简单的基于 FFmpeg 的编码器 - 纯净版&#xff08;不包含 libavformat&#xff09; 最简单的基于 FFmpeg 的视频编码器&#xff08;YUV 编码为 HEVC&#xff08;H.265&#xff09;&#xff09;正文结果工程文件下载 最简单的基于 FFmpeg 的视频编码器&#xff08;YUV 编码为 …

❤ hexo主题+Gitee搭建个人博客

Hexo的基本使用 1. ​认识 官网 官网地址&#xff1a;https://hexo.io/zh-cn/ 介绍 Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他渲染引擎&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。即把用…

化学分子Mol2文件格式与使用注意事项

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Mol2文件示例二、 Mol2文件主要结构解释及注意事项MOLECULE 字段解释ATOM 字段解释BOND 字段解释SUBSTRUCTURE字段解释 总结参考资料 前言 Mol2格式文件是一个ASCII 文件&#xff0c;由Tripos…

Siamfc论文中文翻译(详细!)

Fully-Convolutional Siamese Networks for Object Tracking 用于对象跟踪的Siamese网络 说明 建议对照siamfc&#xff08;2021版&#xff09;原文阅读&#xff0c;翻译软件翻译出来的效果不好&#xff0c;整体阅读体验不佳&#xff0c;所以我对译文重新进行了整理&#xff0…

【ArcGIS】利用高程进行坡度分析:区域面/河道坡度

在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操案例1&#xff1a;流域面上坡度计算案例2&#xff1a;河道坡度计算2.1 案例数据2.2 操作步骤 参考 坡度 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数…

02|索引优化

数据准备 创建联合索引 KEY idx_name_age_position (name,age,position) USING BTREE CREATE TABLE employees (id int(11) NOT NULL AUTO_INCREMENT,name varchar(24) NOT NULL DEFAULT COMMENT 姓名,age int(11) NOT NULL DEFAULT 0 COMMENT 年龄,position varchar(20) NO…

在线程调用的函数中使用pthread_exit同样会将线程退出

如上图所示&#xff0c;在func()函数中调用pthread_exit&#xff0c;同样可以退出当前线程&#xff1b; 类似的&#xff0c;如果func&#xff08;&#xff09;函数中调用exit&#xff0c;可以直接退出整个进程。 return 是返回到函数调用处&#xff1b; pthread_exit是退出…