【计算两数之和】不使用加减乘除
计算两数之和不论在计算机中还是生活中,都不算难(即使某些数据过大)。但是如何能更高效的计算时一个难题,或者说在计算机内部是如何解析两个数之间的加法的,这就成了一个可以探讨的问题。
当然我们很了解十进制的算法,那么来看一组简单数组:
56+89
首先个位:6和9相加大于等于10,即会产生进位,此时我们只去个位相加后得出结果的个位,即6+9=15,我们取5,使1进到十位;
然后十位:5+8+1大于等于10,又会产生进位,此时依旧取结果中的个位4,并将十位进到下一位百位;
最后百位:1+0=1小于10,不会产生进位。
得出最终结果:145
同样二进制,一样的道理。但还是存在差异。
例如一组数据:0111,0101
正确答案为12—>1100
首先,获得进位的位置:很简单,两数相与,并左移一位,得到进位的位置。
很好理解,此时的第一、三为产生进位,进到第二、四位上,所以下次相加时给二、四位多加一。
首先要知道,二进制中,只有两个数,即0和1,所以一旦产生进位,或退位,必然也只是0和1。即1+1=10,10-01=01;
然后回头再看不考虑进位的情况下两数相加的结果,即两数相异或,得出0000 0010,其他位则需要进位或者本就为0,不需进位。
然后一直持续的检查进位标志是否需要进位,当为进位标志为0时,表示此时没有一位需要进位,则输出最终结果。
看代码:
int Add(int left,int right)
{int CF=(left&right)<<1;//保存进位信息left^=right;//保存不考虑进位的加法结果//上述的表达式已经计算出不考虑进位的结果,和需要进位的标志位//以下循环里面的都是关于结果和进位之间的计算//相当于之前十进制的例子,56+89,先计算不考虑进位情况的结果:35,此时CF保存的进位为110//给个位,十位,百位分别加上0,1,1,得出最终结果145;while(CF)//有进位的情况下一直检测{right=CF;CF=(left&right)<<1;//继续检测是否还有进位的位left^=right;//将不考虑进位的结果与上次需进位的位相异或,得出的结果依旧没有考虑是否进位存在//且若此时的进位标志为0,不需要进位,则考虑不考虑是否进位都无关,所以是最终结果//但若是依旧存在进位标志,则继续进行上述步骤。}return left;
}
【计算两数之和】不使用加减乘除相关推荐
- 用函数计算两数之和和两数之积
函数的优点 函数是面向过程编写的最重要的语法结构 在工程上函数可以使我们的代码更具有结构性,更加美观 函数也可以提升我们的代码可维护性 运用函数计算两数之和和两数乘积 int MyAdd(int _x ...
- linux-shell脚本-利用shell函数计算两数之和--思考return原理
一.实例1(错误代码) 在shell脚本的学习过程中,遇到定义一个带有return语句的函数,来计算两数之和,代码如下: #!/bin/bash funWithReturn(){echo " ...
- 不使用算术运算符计算两数之和
计算两个数之和,本来是一件小学生就会做的事,不对,幼儿园学生都会!可是偏偏有些面试官,要求计算两个数之和不能用加号"+",这不是故意刁难人嘛.可是为了offer,还是得硬着头皮去做 ...
- 数组计算两数之和,三数之和,四数之和
这种计算几个数据之和的题目, 一般分为 在同一个数组中计算几个数之和等于某一个值. 还有一种是给几个数组,每个数组中取一个数据,让你算几个数之和等于某一个值. 一般情况下,第二中的难度会更大,因为去重 ...
- 【Java】编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出结果...
public class MyTest {public static void main(String[] args) {int a=2;int b=6;int c=a+b;System.out.pr ...
- html 计算两数之和,百度web前端面试题之求两个数的最大公约数和最小公倍数
求两览页些求时是过解些这确如目前例总站回广随个数的最大公约数和最小公倍数,好是能览调不页新代些事几求事都时学下是事功过发,解像是第三题, 找到如下简洁遇新是直朋能到分览写法: <1> 用辗 ...
- JavaScript中如何用函数求任意两数之和?
1.首先计算任意两数之和并输出,这里以1-100举例 var sum=0;for(var i=1;i<=100;i++) {sum=sum+i;} console.log(sum);这里打开页面 ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 【算法】哈希表 ( 两数之和 )
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
最新文章
- WCF优化的几个常规思路
- MySQLinnodb_monitor及死锁检测
- QuickBI助你成为分析师-数据建模(一)
- sprintf-%s的用法
- Ubuntu 安装任意版本Django
- 检测python进程是否存活
- 架构 | 聊聊我心中的架构设计观
- 宝塔面板绑定域名导致无法访问
- 在读博士生 2 年实现 Nature、Science 双发,他来自这所高校!
- rsa前后端加密流程_不懂前后端分离?这篇就够了
- 斯坦福机器学习课程 Exercise 习题三
- android color列表,Android应用资源---状态颜色列表(Color State List)
- POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- Python基础_列表与元组
- SCCM部署前的IIS、WSUS等准备
- wangEditor 全屏 预览 查看源码
- 如何进行在线教育平台开发(源码篇)
- 计算机专业考注册测绘师经验,2017年注册测绘师考试知识点整理:测绘综合能力--摄影测量与遥感...
- 喝酒娱乐小游戏微信小程序源码