18.1---不用加号的加法(CC150)
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)的更多相关文章
- python不用加号实现加法
问题: Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.E ...
- LeetCode(不用加号的加法)
题目: 设计一个函数把两个数相加,不得使用+或者其他算数运算符. 示例: 输入:a=1,b=1 输出:2 提示: a,b均有可能是负数或0 结果不会溢出32位整数 初始思路: 看到题目我就明白只能用位 ...
- C语言不使用加号实现加法运算的几种方法
今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...
- 编程算法 - 不用加减乘除做加法 代码(C)
不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...
- Python 解决面试题47 不用加减乘除做加法
在看<剑指Offer>过程中,面试题47不用加减乘除做加法,给出的思路是使用二进制的异或以及与运算,总之就是使用二进制.但是在使用Python实现的过程中,对于正整数是没有问题的,但是对于 ...
- 剑指offer(48)不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目分析 不用加减乘除做加法,我第一时间想到的就是用位运算,毕竟计算机是二进制的,所有的操作都是以位运算为基础 ...
- 《剑指offer》第六十五题(不用加减乘除做加法)
// 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷ // 四则运算符号. #include <iostream> int A ...
- 剑指offer42:不用加减乘除做加法
分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1): 2. 做进位,5+7中有进位,进位的值 ...
- 【剑指offer】面试题 65. 不用加减乘除做加法
面试题 65. 不用加减乘除做加法 题目描述 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. Java 实现 public class Solution { ...
随机推荐
- hdu 4006 The kth great number(优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4006 题目大意: 第一行 输入 n k,后有 n 行,对于每一行有两种状态 ,①“I x” : 插入 ...
- JQM弹出对话框
<div data-role="page" id="pageone"> <div data-role="header"&g ...
- JS判断是否是IE浏览器
前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,<32 bytes, ehr ... 9, ...
- Jbuilder 2008安装及破解
1.下载Jbuilder及破解包 2.安装: 1>点击install 2> 选择第一项: 3>同意协议: 4>选择安装目录 5>选择服务器 6>选择默认 7> ...
- 关于MarshalByRefObject的解释
http://www.cnblogs.com/webfpc/archive/2010/03/10/1667101.html 首先了解一下不同应用程序域中的对象的通信方式有两种: 一种是跨应用程序域边界 ...
- sqlmap写文件为空之谜
恰逢有一个SQL注入可以通过sqlmap进行,而且权限高得离谱,直接就是root权限.既然是root权限当然是想直接getshell咯.可是只是sqlmap -u xxx --os-shell的时候却 ...
- 使用 Ant 自动生成项目构建版本
引言 对 于多版本项目,要提供新版本来跟上新功能或缺陷报告增加的速度,并同时仍然保持可接受的质量水平,可能是一项不小的挑战.构建自动化可确保准确性和消除人 为错误的可能性,从而部分地解决此问题.自动化 ...
- Linux内核循环链表经典分析和移植
为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/st ...
- SQL笔记 - 解决CTE定位点类型和递归部分的类型不匹配
在CTE递归测试,也就是部门名称拼接的时候,遇到了小问题: 登时就迷糊了:不都是取的是Unit表中的同一个列,相加之后类型就变了么? 难道是因为,系统知道这是在进行递归运算,但又不确定递归的层次,以及 ...
- JavaScript模板引擎实现数据交互
经过1年的磨练,近期终于稍微明白到,前端是怎么做到企业要求的:数据交互. 1,ajax+json这个是必须学的,但没问题,我们可以通过这个博客来慢慢了解怎么回事? 2,可以通过JS框架和JS模板来实现 ...