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

剑指offer66_不用加减乘除做加法

不用加减乘除做加法


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

数据范围

输入和输出都在int范围内。

样例
输入:num1 = 1 , num2 = 2输出:3

算法思路

这是一个不使用加减运算符实现整数加法的算法,利用了位运算来模拟加法过程。核心思想是将加法分解为:

  1. 无进位相加(通过异或运算 ^ 实现)
  2. 计算进位(通过与运算 & 和左移 << 实现)
  3. 循环直到进位为0
  • 时间复杂度O(1)
    因为整数位数固定(例如32位整数),最坏情况下循环次数由进位传递决定,最多循环32次。
  • 空间复杂度O(1)
    只使用了常数个临时变量,不随输入规模变化。
class Solution {
public:int add(int num1, int num2) {while (num2) {  // 当进位不为0时继续循环int sum = num1 ^ num2;      // 无进位相加结果(异或)int carry = (num1 & num2) << 1; // 计算进位(与运算后左移1位)num1 = sum;     // 更新num1为无进位和num2 = carry;   // 更新num2为进位值}return num1;  // 当进位为0时,num1即为最终结果}
};

实例演示(以 5 + 7 为例)

步骤分解:
  1. 初始状态
    num1 = 5 (二进制 0101),
    num2 = 7 (二进制 0111)
  2. 第一次循环
    • sum = 0101 ^ 0111 = 0010 (十进制 2)
    • carry = (0101 & 0111) << 1 = 0101 << 1 = 1010 (十进制 10)
    • 更新:num1 = 2, num2 = 10
  3. 第二次循环
    • sum = 0010 ^ 1010 = 1000 (十进制 8)
    • carry = (0010 & 1010) << 1 = 0010 << 1 = 0100 (十进制 4)
    • 更新:num1 = 8, num2 = 4
  4. 第三次循环
    • sum = 1000 ^ 0100 = 1100 (十进制 12)
    • carry = (1000 & 0100) << 1 = 0000 << 1 = 0000 (十进制 0)
    • 更新:num1 = 12, num2 = 0
  5. 终止
    num2 = 0,退出循环,返回 num1 = 12
最终结果:

5 + 7 = 12

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

相关文章:

  • Spring Boot 订单超时自动取消的 3 种主流实现方案
  • 腾讯二面手撕题:BatchNorm和LayerNorm
  • 08_Opencv_基本图形绘制
  • 学成在线项目
  • Eureka+LoadBalancer实现服务注册与发现
  • 限流算法与实现
  • Shell脚本-tee工具
  • Kafka 在分布式系统中的关键特性与机制深度解析
  • kotlin Flow快速学习2025
  • PostgreSQL实战:高效SQL技巧
  • 【LeetCode刷题指南】--反转链表,链表的中间结点,合并两个有序链表
  • 基于单片机无线防丢/儿童防丢报警器
  • 数据结构 | 栈:构建高效数据处理的基石
  • 【2025最新版】PDFelement全能PDF编辑器
  • [硬件电路-58]:根据电子元器件的控制信号的类型分为:电平控制型和脉冲控制型两大类。
  • LockFile简要分析
  • 《镜语者》
  • RocketMQ学习系列之——MQ入门概念
  • 【基础】——股票市场基础知识宏观
  • 无 sudo 权限的环境下将 nvcc (CUDA Toolkit) 安装到个人目录 linux
  • 【c++】200*200 01灰度矩阵求所有的连通区域坐标集合
  • Numpy库,矩阵形状与维度操作
  • 本地部署 Claude 大语言模型的完整实践指南
  • 数据治理,治的是什么?
  • 建筑墙壁损伤缺陷分割数据集labelme格式7820张20类别
  • 【华为机试】169. 多数元素
  • Spring Cloud Gateway 电商系统实战指南:架构设计与深度优化
  • 最大子数组和问题-详解Kadane算法
  • 数学建模--matplot.pyplot(结尾附线条样式表格)
  • 力扣 hot100 Day50