当前位置:网站首页>【C语言刷题】牛客JZ65——不用四则运算作加法
【C语言刷题】牛客JZ65——不用四则运算作加法
2022-08-02 18:32:00 【桦秋静】
牛客JZ65——不用四则运算作加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 -10 ≤ _n _≤ 1000
进阶:空间复杂度 O(1),时间复杂度 O(1)
示例
示例1
输入:1,2 返回值:3
示例2
输入:0,0 返回值:0
核心代码模式
int Add(int num1, int num2 )
{
}
思路分析和代码实现(C语言)
思路分析
首先看十进制是如何做的: 5+7=12,三步走
第一步:相加各位的值,不算进位,得到2。
第二步:计算进位值,得到10。如果这一步的进位值为0,那么第一步得到的值就是最终结果。
第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。
同样我们可以用三步走的方式计算二进制值相加: 5(101),7(111)
第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位作异或操作,即101^111。
第二步:计算进位值,得到1010,相当于各位作与操作得到101,再向左移一位得到1010,(101&111)<<1。
第三步:重复上述两步, 各位相加 010^1010=1000,进位值为100=(010&1010)<<1。
再继续重复上述两步:1000^100 = 1100,进位值为0,跳出循环,1100为最终结果。
也就是一直到进位值为0为止。
实际上,在计算机中:
两个二进制的相加结果是用一个异或门实现的。
两个二进制的进位结果是用一个与门来实现的。
具体到代码上如何实现?用两个变量a和b分别存储非进位值和进位值,创建循环,只要b的值不为0就继续循环,每次循环中先用一个临时值tmp保存b的值,然后用b来装载进位值,也就是(a & b)<<1,用a来装载非进位值,即a^tmp(因为b先被改变了,得用b的副本)。等出了循环后返回a的值。
代码实现
int Add(int num1, int num2 )
{
int a = num1;//放非进位值
int b = num2;//放进位值
while(b != 0)
{
int tmp = b;
b = (a & b) << 1;
a ^= tmp;
}
return a;
}

边栏推荐
- 浅谈一下pyd文件的逆向
- 如何确保智能工厂的安全?
- 洛谷P4799 世界冰球锦标赛
- 如何应对机器身份带来的安全风险
- Electronic Industry Inventory Management Pain Points and WMS Warehouse Management System Solutions
- Functional test points for time, here is a comprehensive summary for you
- 手机银行体验性测试:如何获取用户真实感受
- Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor
- 小姐姐面试蚂蚁金服被虐经历,心疼...
- 固态硬盘接口类型介绍
猜你喜欢
随机推荐
喜迎八一 《社会企业开展应聘文职人员培训规范》团体标准出版发行会暨橄榄枝大课堂上线发布会在北京举行
药品研发--检验记录与检验报告书的书写细则
leetcode:622. 设计循环队列【循环队列板子】
Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor
洛谷P2880 Balanced Lineup G
VSTO踩坑记录(1)- 从零开始开发outlook插件
力扣 622. 设计循环队列
C#里如何简单的校验时间格式
论文阅读_胶囊网络CapsNet
cache2go-源码阅读
通信大学生走向岗位,哪些技能最实用?
T5: Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
数据治理:数据集成和应用模式的演进
NIO之Selector执行流程
LeetCode 2353. 设计食物评分系统(sortedcontainers)
LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
Mobile Banking Experience Test: How to Get the Real User Experience
Five keys to a successful Industrial IoT deployment
洛谷P4799 世界冰球锦标赛
How can services start smoothly under tens of millions of QPS









