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

剑指Offer65.不用加减乘除做加法 C++

1、题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2

2、VS2019上运行

使用位运算的方法

#include <iostream>class Solution {
public:/*** 计算两个整数的和* @param a 第一个整数* @param b 第二个整数* @return 两个整数的和*/int add(int a, int b) {while (b != 0) {unsigned int carry = (unsigned int)(a & b) << 1; // 计算进位//按位异或,相同为0,不同为1a = a ^ b; // 计算无进位和b = carry; // 将进位值存入b,用于下一轮循环}return a; // 返回最终结果}
};int main() {Solution solution;int a = 5; // 第一个整数int b = 7; // 第二个整数int sum = solution.add(a, b); // 计算两个整数的和std::cout << "Sum: " << sum << std::endl; // 输出结果return 0;
}

Sum: 12

3、解题思路

  • 假设我们要计算 a = 3 + 5。
    首先,将a初始化为第一个加数3(a=3),将b初始化为第二个加数5(b=5)。
    在while循环中,不断执行以下操作,直到b等于0:
  • 1.计算进位值carry:carry = (unsigned int)(a & b) << 1。
    2.这一步使用位运算符&和<<计算a和b的按位与操作,然后将结果左移1位来得到进位值carry。这是因为两个数相加的进位值是它们按位与操作的结果向左移动一位。
    3.更新a的值:a = a ^ b。
    4.这一步使用位运算符^计算a和b的按位异或操作,将结果存储回a。按位异或操作得到的结果相当于不考虑进位的加法结果。
    5.更新b的值:b = carry。
    6.这一步将进位值carry赋值给b,为下一次循环准备。
  • 在第一次循环中,执行以下操作:
    carry = (unsigned int)(3 & 5) << 1 = 1 << 1 = 2。
    a = 3 ^ 5 = 6。
    b = 2。
  • 在第二次循环中,执行以下操作:
    carry = (unsigned int)(6 & 2) << 1 = 0 << 1 = 0。
    a = 6 ^ 2 = 4。
    b = 0。
    由于b现在为0,循环结束。
    最后,返回a的值4,即3 + 5的结果。
http://www.lryc.cn/news/142854.html

相关文章:

  • 【linux命令讲解大全】004.探索Linux命令行中的chmod和chown工具
  • nginx会话保持
  • SpringBoot使用Druid连接池 + 配置监控页面(自定义版 + starter版)
  • 【业务功能篇77】微服务-OSS对象存储-上传下载图片
  • 【CSS 常用加载动画效果】
  • python 模块requests 发送 HTTP 请求
  • 关于 Camera 预览和录像画质不一样的问题分析
  • 【音视频】 视频的播放和暂停,当播放到末尾时触发 ended 事件,循环播放,播放速度
  • Python数据分析高薪实战第一天 python基础与项目环境搭建
  • pandas数据分析——groupby得到分组后的数据
  • Android studio 软件git使用
  • 通过C实现sqlite3操作,导入电子词典
  • K8S集群中使用JDOS KMS服务对敏感数据安全加密 | 京东云技术团队
  • SpringBoot+quartz实现定时任务的创建、删除、查询操作
  • Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习
  • 排序算法:归并排序
  • Hbase-技术文档-spring-boot整合使用hbase--简单操作增删改查--提供封装高可用的模版类
  • 基于Pytorch的神经网络部分自定义设计
  • 持续更新串联记忆English words
  • postgresql 内核源码分析 btree索引的增删查代码基本原理流程分析,索引膨胀的原因在这里
  • 详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优
  • vue项目中 package.json 详解
  • 为什么要进行管网水位监测,管网水位监测的作用是什么
  • webpack学习笔记
  • 解析代理IP在跨境电商和社媒营销中的关键作用
  • Unity 之 Start 与Update 方法的区别
  • Spring Boot中如何编写优雅的单元测试
  • 三星Galaxy S23与iPhone 15的对比分析:谁会胜出?
  • MySQL索引 事物 存储引擎
  • 【谷粒学院】报错记录