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

public static int addAB(int a, int b){
int res = 0;
String str1 = Integer.toBinaryString(a);
String str2 = Integer.toBinaryString(b);
ArrayList<Integer> list = new ArrayList();
int digit = 0;
int cur = 0;
int i = str1.length()-1;
int j = str2.length()-1;
while(i >= 0 && j >= 0){
int tmp = 0; if(str1.charAt(i) == '1'){
System.out.println("here");
if(str2.charAt(j) == '1'){
if(cur == 1){
tmp = 1;
digit = 1;
}
else{
tmp = 0;
digit = 1; }
}
else{
if(cur == 1){
digit = 1;
tmp = 0;
}
else{
digit = 0;
tmp = 1;
}
}
}
else{
if(str2.charAt(j) == '1'){
if(cur == 1){
digit = 1;
tmp = 0;
}
else{
tmp = 1;
digit = 0;
}
}
else{
if(cur == 1){
digit = 0;
tmp = 1;
}
else{
digit = 0;
tmp = 0;
}
} }
cur = digit;
digit = 0;
list.add(tmp);
i--;
j--;
}
while(i >= 0){
int tmp = 0;
if(str1.charAt(i) == '1'){
if(cur == 1){
tmp = 0;
digit = 1;
}
else{
tmp = 1;
digit = 0;
} }
else{
if(cur == 1){
tmp = 1;
digit = 0;
}
else{
digit = 0;
tmp = 0;
}
}
list.add(tmp);
cur = digit;
digit = 0;
i--; }
while(j >= 0){
int tmp = 0;
if(str2.charAt(j) =='1'){
if(cur == 1){
tmp = 0;
digit = 1;
}
else{
tmp = 1;
digit = 0;
}
}
else{
if(cur == 1){
tmp = 1;
digit = 0;
}
else{
digit = 0;
tmp = 0;
}
}
list.add(tmp);
cur = digit;
digit = 0;
j--; }
if(cur == 1){
list.add(1);
}
System.out.println(list); int num = 0;
String str = new String();
for(int k = list.size()-1;k >= 0; k--){
str += list.get(k);
}
System.out.println(str);
return Integer.valueOf(str,2) ;
}

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

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

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

答案:

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

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. h5移动端滑动的细节

    1.获取手指滑动的长度: var hasTouch = 'ontouchstart' in window && !isTouchPad, _start:function(e){ var ...

  2. linq 多表分组查询统计

    var q1 = from orderitem in q2 join pd in _iProductDetailContract.Entities on orderitem.ProductDetail ...

  3. Java Servlet系列之Servlet生命周期

    Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法 在Se ...

  4. ServletContext

    1.为什么需要servletContext    需求1 需求2 --------------->解决之道servletContext     servletContext 1.ServletC ...

  5. java 使用BeanUtils.copyProperties(Object source,Object target) 复制字段值

    BeanUtils.copyProperties(person, wsPerson);把person的字段值,复制给wsPerson // 只复制两个实体中,字段名称一样的 很有用的一个功能...

  6. jquery取消选择select下拉框

    有三个select下拉框一个大类,两个小类隐藏,需要在选择大类的时候,小类显示同时清除另外的小类选择的项这需求有点儿.......... 下面是三个select: <select name=&q ...

  7. github常见操作和常见错误!

    本人总结: 1.问题:  fatal: Not a git repository (or any of the parent directories) 解决: 本地库还没有创建,请先用git init ...

  8. APACHE POI教程 --java应用程序用POI与Excel交互

    POI报表 --用POI与Excel交互 AURISOFT 第一章 POI简介 --Jakata Poi HSSF:纯java的Excel解决方案 在我们实际的开发中,表现层的解决方案虽然有多样,但是 ...

  9. mysql 时间格式与日期格式转换,去除datetime中的具体时间

    DATE_FORMAT(`addtime`,'%Y-%m-%d')  时间格式转成字符串 time_format('1924-01-02', '%Y-%m-%d') 字符串转成时间格式 CONVERT ...

  10. Linux下,telnet命令如何退出

    测试连接本地的memcached telnet 链接后是这样的: wangkongming@Vostro ~ $ telnet Trying 127.0.0.1... Connected to 127 ...