当前位置:网站首页>【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;
}

边栏推荐
猜你喜欢

3 and a half years of testing experience, I don't have 20K, it seems it's time to change jobs

MySQL详细安装与配置

NIO之Selector执行流程

WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器

电子行业库存管理痛点与WMS仓储管理系统解决方案

博云入选 Gartner 中国 DevOps 代表厂商

技术人生 | 如何画业务大图

Enterprise cloud cost control, are you really doing it right?

selenium installation and environment configuration firefox
![[论文分享] VideoFlow: A Flow-Based Generative Model for Video](/img/da/eac862ab2457384846a0b6b20ea3a9.png)
[论文分享] VideoFlow: A Flow-Based Generative Model for Video
随机推荐
NIO之Selector执行流程
开源一夏 |【云原生】DevOps(五):集成Harbor
How to mitigate the attack of corporate account hijacking?
MySQL LIKE – 语法和用法示例教程
针对时间的功能测试点,这里给你总结全面了
I have 8 years of experience in the Ali test, and I was able to survive by relying on this understanding.
常用随机变量的数学期望和方差
LeetCode 2343. 裁剪数字后查询第 K 小的数字
NIO基础之三大组件
How to build a quasi-real-time data warehouse?
数据治理:数据集成和应用模式的演进
浅谈一下pyd文件的逆向
What are the useful real-time network traffic monitoring software
golang刷leetcode 经典(1) LRU缓存机制
洛谷P2574 XOR的艺术
[论文分享] VideoFlow: A Flow-Based Generative Model for Video
Win11主题下载一直转圈怎么办?Win11主题下载一直转圈的解决方法
golang刷leetcode 字符串(4)逆波兰式
快手web did可用生成
仿制药的未来商机--个人研发的体会