当前位置:网站首页>【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;
}
边栏推荐
猜你喜欢
[Dynamic Programming Special Training] Basics
Electronic Industry Inventory Management Pain Points and WMS Warehouse Management System Solutions
selenium安装和环境配置Firefox
Endanger the safety of common Internet attacks have?
MySQL主从搭建(问题大聚集,告别部署烦恼)
什么是会话劫持以及如何阻止它
衡量软件产品质量的 14 个指标
Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor
MySQL详细安装与配置
Interviewer: can you talk about optimistic locking and pessimistic locks
随机推荐
LeetCode 2353. 设计食物评分系统(sortedcontainers)
golang刷leetcode 经典(6) 实现跳表
Functional test points for time, here is a comprehensive summary for you
洛谷P2880 Balanced Lineup G
[深入研究4G/5G/6G专题-49]: 5G Link Adaption链路自适应-5-上行链路自适应ULLA-PUSCH信道
golang刷leetcode 字符串(4)逆波兰式
3年半测试经验,20K我都没有,看来是时候跳槽了
如何应对机器身份带来的安全风险
2022最新彩虹表
cache2go-源码阅读
通信大学生走向岗位,哪些技能最实用?
How can services start smoothly under tens of millions of QPS
Mppt光伏最大功率点跟踪控制matlab仿真
从技术全景到场景实战,透析「窄带高清」的演进突破
Code Inspection for DevOps
selenium installation and environment configuration firefox
如何确保智能工厂的安全?
下载mysql的源码包
浅谈一下pyd文件的逆向
阿里35+老测试员生涯回顾,自动化测试真的有这么吃香吗?