1,自己写的又长又臭的代码,也能AC,但是太丑了。主要是通过二进制来算。

  1. public static int addAB(int a, int b){
  2. int res = 0;
  3. String str1 = Integer.toBinaryString(a);
  4. String str2 = Integer.toBinaryString(b);
  5. ArrayList<Integer> list = new ArrayList();
  6. int digit = 0;
  7. int cur = 0;
  8. int i = str1.length()-1;
  9. int j = str2.length()-1;
  10. while(i >= 0 && j >= 0){
  11. int tmp = 0;
  12.  
  13. if(str1.charAt(i) == '1'){
  14. System.out.println("here");
  15. if(str2.charAt(j) == '1'){
  16. if(cur == 1){
  17. tmp = 1;
  18. digit = 1;
  19. }
  20. else{
  21. tmp = 0;
  22. digit = 1;
  23.  
  24. }
  25. }
  26. else{
  27. if(cur == 1){
  28. digit = 1;
  29. tmp = 0;
  30. }
  31. else{
  32. digit = 0;
  33. tmp = 1;
  34. }
  35. }
  36. }
  37. else{
  38. if(str2.charAt(j) == '1'){
  39. if(cur == 1){
  40. digit = 1;
  41. tmp = 0;
  42. }
  43. else{
  44. tmp = 1;
  45. digit = 0;
  46. }
  47. }
  48. else{
  49. if(cur == 1){
  50. digit = 0;
  51. tmp = 1;
  52. }
  53. else{
  54. digit = 0;
  55. tmp = 0;
  56. }
  57. }
  58.  
  59. }
  60. cur = digit;
  61. digit = 0;
  62. list.add(tmp);
  63. i--;
  64. j--;
  65. }
  66. while(i >= 0){
  67. int tmp = 0;
  68. if(str1.charAt(i) == '1'){
  69. if(cur == 1){
  70. tmp = 0;
  71. digit = 1;
  72. }
  73. else{
  74. tmp = 1;
  75. digit = 0;
  76. }
  77.  
  78. }
  79. else{
  80. if(cur == 1){
  81. tmp = 1;
  82. digit = 0;
  83. }
  84. else{
  85. digit = 0;
  86. tmp = 0;
  87. }
  88. }
  89. list.add(tmp);
  90. cur = digit;
  91. digit = 0;
  92. i--;
  93.  
  94. }
  95. while(j >= 0){
  96. int tmp = 0;
  97. if(str2.charAt(j) =='1'){
  98. if(cur == 1){
  99. tmp = 0;
  100. digit = 1;
  101. }
  102. else{
  103. tmp = 1;
  104. digit = 0;
  105. }
  106. }
  107. else{
  108. if(cur == 1){
  109. tmp = 1;
  110. digit = 0;
  111. }
  112. else{
  113. digit = 0;
  114. tmp = 0;
  115. }
  116. }
  117. list.add(tmp);
  118. cur = digit;
  119. digit = 0;
  120. j--;
  121.  
  122. }
  123. if(cur == 1){
  124. list.add(1);
  125. }
  126. System.out.println(list);
  127.  
  128. int num = 0;
  129. String str = new String();
  130. for(int k = list.size()-1;k >= 0; k--){
  131. str += list.get(k);
  132. }
  133. System.out.println(str);
  134. return Integer.valueOf(str,2) ;
  135. }

2,CC150课本上的答案。写的非常漂亮,一定要记住了。

思路,1,如果只加不进位,1+1=0,1,0相加1.0+0=0;2,如果看什么时候进位,11的时候。

所以就是a^b,a&b。但进位是往前的,所以,a&b<<1.

答案:

  1. public static int addAB(int a, int b) {
  2. // write code here
  3. if(b == 0) return a;
  4. int sum = a ^ b;//只加不进位
  5. int carry = (a & b) << 1;//因为只有1,1,时候才进位。
  6. return addAB(sum,carry);
  7. }

18.1---不用加号的加法(CC150)的更多相关文章

  1. python不用加号实现加法

    问题: Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.E ...

  2. LeetCode(不用加号的加法)

    题目: 设计一个函数把两个数相加,不得使用+或者其他算数运算符. 示例: 输入:a=1,b=1 输出:2 提示: a,b均有可能是负数或0 结果不会溢出32位整数 初始思路: 看到题目我就明白只能用位 ...

  3. C语言不使用加号实现加法运算的几种方法

    今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...

  4. 编程算法 - 不用加减乘除做加法 代码(C)

    不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...

  5. Python 解决面试题47 不用加减乘除做加法

    在看<剑指Offer>过程中,面试题47不用加减乘除做加法,给出的思路是使用二进制的异或以及与运算,总之就是使用二进制.但是在使用Python实现的过程中,对于正整数是没有问题的,但是对于 ...

  6. 剑指offer(48)不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目分析 不用加减乘除做加法,我第一时间想到的就是用位运算,毕竟计算机是二进制的,所有的操作都是以位运算为基础 ...

  7. 《剑指offer》第六十五题(不用加减乘除做加法)

    // 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷ // 四则运算符号. #include <iostream> int A ...

  8. 剑指offer42:不用加减乘除做加法

    分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1): 2. 做进位,5+7中有进位,进位的值 ...

  9. 【剑指offer】面试题 65. 不用加减乘除做加法

    面试题 65. 不用加减乘除做加法 题目描述 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. Java 实现 public class Solution {    ...

随机推荐

  1. hdu 4006 The kth great number(优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4006 题目大意: 第一行 输入 n k,后有 n 行,对于每一行有两种状态 ,①“I x” : 插入 ...

  2. JQM弹出对话框

    <div data-role="page" id="pageone"> <div data-role="header"&g ...

  3. JS判断是否是IE浏览器

    前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,<32 bytes, ehr ... 9, ...

  4. Jbuilder 2008安装及破解

    1.下载Jbuilder及破解包 2.安装: 1>点击install 2> 选择第一项: 3>同意协议: 4>选择安装目录 5>选择服务器 6>选择默认 7> ...

  5. 关于MarshalByRefObject的解释

    http://www.cnblogs.com/webfpc/archive/2010/03/10/1667101.html 首先了解一下不同应用程序域中的对象的通信方式有两种: 一种是跨应用程序域边界 ...

  6. sqlmap写文件为空之谜

    恰逢有一个SQL注入可以通过sqlmap进行,而且权限高得离谱,直接就是root权限.既然是root权限当然是想直接getshell咯.可是只是sqlmap -u xxx --os-shell的时候却 ...

  7. 使用 Ant 自动生成项目构建版本

    引言 对 于多版本项目,要提供新版本来跟上新功能或缺陷报告增加的速度,并同时仍然保持可接受的质量水平,可能是一项不小的挑战.构建自动化可确保准确性和消除人 为错误的可能性,从而部分地解决此问题.自动化 ...

  8. Linux内核循环链表经典分析和移植

    为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/st ...

  9. SQL笔记 - 解决CTE定位点类型和递归部分的类型不匹配

    在CTE递归测试,也就是部门名称拼接的时候,遇到了小问题: 登时就迷糊了:不都是取的是Unit表中的同一个列,相加之后类型就变了么? 难道是因为,系统知道这是在进行递归运算,但又不确定递归的层次,以及 ...

  10. JavaScript模板引擎实现数据交互

    经过1年的磨练,近期终于稍微明白到,前端是怎么做到企业要求的:数据交互. 1,ajax+json这个是必须学的,但没问题,我们可以通过这个博客来慢慢了解怎么回事? 2,可以通过JS框架和JS模板来实现 ...