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

【位运算】leetcode371:两整数之和

一.题目描述

两整数之和

二.思路分析

题目要求我们实现两整数相加,但是不能使用加号,应该立马想到是用位运算来解决问题。之前说过,异或就是“无进位相加”,故本题可以先将两数异或,然后想办法让得到的结果进位即可。

如何进位呢?我们知道,任意一个比特位相加只有3中情况:0+0,1+1,0+1,其中只有1+1时需要进位。而按位与的特点是有0则0,故我们可以用a&b,结果是1的比特位就是需要进位的。但进位是要进到它的下一位

故最终结果为(a ^ b) + ((a & b) << 1)但题目禁止我们使用加号,怎么使这两部分相加呢?题目本身就让我们实现加法呀,重复以上的逻辑不就行了,所以这是一个循环的过程。循环什么时候结束呢?当不需要进位,即(a & b) << 1 == 0时就不需要加了,循环结束。

下面用13+28=41来举例

三.代码实现

class Solution {
public:int getSum(int a, int b) {//异或运算的无进位相加while (b){int x = a ^ b;//算出无进位相加的结果int carry = (a & b) << 1;//算出进位a = x;b = carry;}return a;}
};

 

http://www.lryc.cn/news/150310.html

相关文章:

  • 【爬虫小知识】如何利用爬虫爬网页——python爬虫
  • 什么是跨域问题 ?Spring MVC 如何解决跨域问题 ?Spring Boot 如何解决跨域问题 ?
  • 线性代数的学习和整理17:向量空间的基,自然基,基变换等(未完成)
  • Java中支持分库分表的框架/组件/中间件简介
  • 7.2 项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)
  • excel怎么设置任意选一个单元格纵横竖横都有颜色
  • 期货-股票交易规则
  • Makefile一些语法
  • 0基础可以转行编程行业么
  • 【spark】dataframe慎用limit
  • 基于OpenCV+LPR模型端对端智能车牌识别——深度学习和目标检测算法应用(含Python+Andriod全部工程源码)+CCPD数据集
  • C++学习6
  • bazel使用中存在的问题
  • svn软连接和文件忽略
  • 自动驾驶攻城战,华为小鹏先亮剑
  • 企业供应链数字化怎么做?企业数字化供应链流程落地方式
  • java八股文面试[多线程]——synchronized 和lock的区别
  • 实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式
  • Anaconda Prompt输入jupyter lab无反应
  • JavaScript Web APIs - 05 Window对象 、本地存储
  • Ansible学习笔记6
  • Linux挖矿程序清除
  • 使用Git和Github上传代码文件
  • OpenAI发布ChatGPT企业级版本
  • vue3中axios的使用方法
  • 【docker】容器的运行、停止、查看等基本操作
  • Python|OpenCV-鼠标自动绘制图像(4)
  • IDEA 设置提示信息
  • 清理docker镜像方法