博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法之道----不用加,减, 乘 ,除 计算 a+b的值
阅读量:7236 次
发布时间:2019-06-29

本文共 1075 字,大约阅读时间需要 3 分钟。

hot3.png

 在面试笔试中会考到这类题目,要求不用加减乘除运算来计算两数和,其实考的就是位运算。

 

       规则1:

       如果1010+0101 = 1111在计算上不产生进位, 则1010^0101 = 1010+0101 = 1111   

     

      上面1010和 0101 二进制加法计算的特点是没有进位,所以他们的二进制加法和按位异或运算结果才会相同。但是如果如果是二进制加法运算有进位,则明显以上等价关系就不能成立。

 

       思路:如 20(10100)+25(11001)  =45二进制加法运算会产生进位,那我们把他转换成a和b两个数 满足a+b = 20+25 = 45且a和b二进制加法不会产生进位,按照规则1有 20+25  = a + b = a ^ b,明显我们可以找到一个例子 a=32(100000) b=13(001101)满足上述要求。

 

       如何找到a 和 b:

当产生进位的时候,我们可以试着把产生进制的位置找出来, 20(10100)+25(11001) 进行按位与运算

10100&11001 = 10000  可知道在最高位是两个1相与,故在最高位产生进位,10100^11001 = 01101这个结果是不进位的结果,只要我们把不进位的异或运算加上进位时候带来的结果增量加起来,就是我们最终想要的结果10100+11001 = 101101 .

结果为:10100^11001+(10100&11001)<<1 =  01101+10000 <<1

a  =  01101

b =  10000 <<1

如果a   b还不满足上面思路中的人要求的话,在继续重复上面的过程,知道找出满足思路中的啊a,b的值。

 

代码如下:

C代码 
  1. #include "stdio.h"  
  2. int bitAdd(int a ,int b){  
  3.     printf("第一次递归 bitAdd(%d ,%d )\n",a,b );  
  4.     int jin = a&b;//进位  
  5.     int notJin = a^b;  
  6.     if (jin!=0)  
  7.     {  
  8.         return bitAdd(jin<<1,notJin);  
  9.     }else{  
  10.         return notJin;  
  11.     }  
  12.     return 0;  
  13. }  
  14.  int main()  
  15. {  
  16.     int a ,b;  
  17.     printf("输入两个数做加法(空格隔开)\n");  
  18.     scanf("%d %d",&a,&b);  
  19.     printf("结果:%d+%d=%d",a,b,bitAdd(a,b));  
  20.     return 0;  
  21. }  

 结果:

转载于:https://my.oschina.net/dfsfsdf/blog/117815

你可能感兴趣的文章
content-type收集
查看>>
使用easyui实现列表的批量删除
查看>>
研发费用调整利润
查看>>
11g RAC R2 之Linux DNS 配置
查看>>
Windows 7系统安装MySQL5.5.21图解
查看>>
《5天学会卡西欧fx-5800p之实操视频教程(初级)》目录和我的工作室现场曝光...
查看>>
浏览器桌面通知(notifications)
查看>>
让Sqlite脱离VC++ Runtime独立运行
查看>>
android自动打包方法(ant+proguard+签名)
查看>>
EXP的flashback_scn和flashback_time
查看>>
开机就提示“请安装TCP/IP协议,error=10106”的解决的方法
查看>>
【分享】谁偷走了我的大学
查看>>
MyBatis的Dao层注入SqlSession
查看>>
移动端重构系列12——popup
查看>>
Linux重启命令与如何重启网络?
查看>>
Vim杂记:Sublime的配色方案
查看>>
Android常用功能代码块(转)
查看>>
WP8_ListBox的用法
查看>>
【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
查看>>
Hadoop的调度器总结
查看>>