牛客网·C语言练习不用四则运算符如何实现两数相加?
Posted 一起学编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网·C语言练习不用四则运算符如何实现两数相加?相关的知识,希望对你有一定的参考价值。
题目要求如图
思考
不能使用四则运算,根据过往的学习经历,我唯一能想到的就是位操作符和移位操作符
例:使用位操作符进行int变量交换
位操作符的使用
先来回顾一下位操作符的作用
位操作符操作的是整形的二进制位,它的操作数是2,比较两个整型的二进制位
(1)&按位与:对应的二进制 全为1才是1,否则0
(2)|按位或:对应的二进制 有1为1,全为0才为0
(3)^按位异或:相同为0,不同为1
比较一下正常的二进制相加和按位异或,发现按位异或是没有进位的相加
原本应该是010,但是按位异或后是000
1+1需要进位的1并没有进到下一位里去
而使用按位与操作符,我们可以得到这两个数相加需不需要进位
这时候将按位与之后的结果和按位异或相加,就是我们的答案了
但是题目要求不能使用加减
a.再将按位与的结果0 1 0与 按位异或结果0 0 0进行按位与
b.得到0 0 0,代表无需进位
c.这时候将0 1 0与0 0 0进行按位异或,即得出相加后的结果0 1 0
这个例子比较简单,我们可以再用复杂一点的例子再证明它的可行性
3:0011和5:0101
根据这个思路,我们成功地完成了3和5的相加
代码实现
本题是接口型题目,我们只需要完成一个函数,实现相加的功能
不过我们可以自己写一个主函数来测试它的可行性
如图,函数正确算出了两个数的和
如果这篇博客帮到了你,还请点个赞啦~
-----------------------------------
想学习更多C/C++知识内容可以关注博主的哔站账号:
以上是关于牛客网·C语言练习不用四则运算符如何实现两数相加?的主要内容,如果未能解决你的问题,请参考以下文章
题集牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)