精华内容
下载资源
问答
  • Java两个二进制数求和

    2021-02-09 15:47:28
    在本教程中,您将学习一个Java程序,了解如何对两个二进制数求和。二进制数仅以“ 0”和“ 1”表示。没有其他数字。如果一个数字的数字不为0和1,则它不是二进制数字。我在互联网上看到很例子,它们都只显示程序,...

    1.简介


    在本教程中,您将学习一个Java程序,了解如何对两个二进制数求和。二进制数仅以“ 0”和“ 1”表示。没有其他数字。如果一个数字的数字不为0和1,则它不是二进制数字。我在互联网上看到很多例子,它们都只显示程序,但给出了解释。在这里,它与按位与运算符不同。它看起来像&运算符,但不是。您将在本文中得到澄清。不要跳过任何内容,也不要直接看到代码。
     

     






    通常,这可以通过两种方式完成。首先,我们不使用任何Java API方法,而仅使用交换理论与逻辑设计(STLD)主题中的工程概念,而第二种方法是使用Integer API完成的。

    在编写用于加法的程序之前,让我们看一下如何在纸上进行加法,如下图所示:
    在Java中添加二进制数

    二进制数序列加法如下。

    将两个二进制“ 1”(例如1 + 1)相加会产生十进制数字2,但我们应将其转换为二进制数10。这里0是实际的总和,而1是一个进位。
    0 + 0将产生0
    0 + 1-> 1
    1 + 0-> 1

    在这里,所有输出均应为二进制数字,并且不允许使用十进制数字。

    2.示例算法演练:在Java中添加两个Binay数


    以两个二进制数进行演示。

    binaryNumber1 = 10101
    binaryNumber2 = 10001
    进位= 0
     

    迭代1:


    1010 1
    1000 1

    进位+
    二进制数1的第一个数字+二进制数2的第一个数字0 +1 + 1 = 10(这是一个二进制数),这里是进位+总和的组合。所以在这里进行如下求和。
    进位= 1
    首位总和= 0
     

    迭代2:


    101 0 1
    100 0 1

    进位(来自上一步)+二进制数
    1的第二位+二进制数2的第二位1 + 0 + 0 = 01
    进位= 0
    第二位总和= 1
     

    迭代3:


    10 1 01
    10 0 01

    进位(来自上一步)+二进制数
    1的第三位+二进制数2的第三位0 +1 + 0 = 01
    进位=
    第三位总和= 1

     

    迭代4:


    0 101
    0 001

    进位(来自上一步)+二进制数1的第四位+二进制数2的第四位
    0 + 0 + 0 = 0
    进位= 0
    第四位总和= 0
     

    迭代5:


    1 0101
    1 0001

    进位(来自上一步)+二进制数
    1的第五位+二进制数2的第五位0 +1 + 1 = 10
    进位= 1
    第五位总和= 0

     

    输出:


    公式: 进位+所有数字总和(第五位数字总和第四位数字总和第三位数字总和第二位数字总和第一位数字总和) 100110


     

    3.添加两个二进制数的示例程序

    上面的示例值将传递给该程序并产生相同的输出。
     

    public class AddBinaryNumbers {
    
    	public static void main(String[] args) {
    
    		// two binary numbers
    		long binaryNumber1 = 10101, binaryNumber2 = 10001;
    
    		// i represents the index of the finalSumOutput array.
    		int i = 0;
    
    		// carry which is to hold the value of carry.
    		int carry = 0;
    
    		// Created int array to hold the output binary number
    		int[] finalSumOutput = new int[10];
    
    		while (binaryNumber1 != 0 || binaryNumber2 != 0) {
    
    			finalSumOutput[i++] = (int) (carry + (binaryNumber1 % 10 + binaryNumber2 % 10) % 2);
    
    			carry = (int) ((binaryNumber1 % 10 + binaryNumber2 % 10 + carry) / 2);
    
    			binaryNumber1 = binaryNumber1 / 10;
    			binaryNumber2 = binaryNumber2 / 10;
    		}
    		if (carry != 0) {
    			finalSumOutput[i++] = carry;
    		}
    		--i;
    		System.out.print("Output: ");
    		// printing from the last index to 0.
    		while (i >= 0) {
    			System.out.print(finalSumOutput[i--]);
    		}
    		System.out.print("\n");
    	}
    
    }


    输出:
     

    100110

     

    4.添加二进制数的第二种方法


    Java API Integer类具有parseInt()方法,该方法采用字符串和基数。如果我们传递基数值2,则它将考虑字符串值的二进制数。接下来,我们执行sum并将输出int值传递给toBinaryString()方法,该方法将整数转换回二进制数。我们需要二进制格式的期望输出。

    让我们看看下面的程序。
     

    public class AddBinaryNumbersWay2 {
    
    	public static void main(String[] args) {
    
    		// two binary numbers in string format
    		String binaryNumber1 = "10101", binaryNumber2 = "10001";
    
    		// converting strings into binary format numbers
    		Integer integer1 = Integer.parseInt(binaryNumber1, 2);
    		Integer integer2 = Integer.parseInt(binaryNumber2, 2);
    
    		// adding two integers
    		Integer output = integer1 + integer2;
    
    		// converting final output back to Binary Integer
    		System.out.println(Integer.toBinaryString(output));
    
    	}
    
    }


    输出:

    两种方法都采用相同的输入。观察者的输出也相同。两者都产生预期的结果。

     

    100110
     
     

     

    5.结论


    在本文中,您已经学习了如何编写一个Java程序来添加两个二进制数。这可以通过两种方式完成。第一种方法是不使用任何Java API方法,而完全使用交换理论与逻辑设计(STLD)逻辑。第二种方法是使用Integer包装类基数选项。
    展开全文
  • Leetcode 67. 二进制求和

    2019-07-21 23:24:45
    给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101”...

    题目

    给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0。

    示例 1:

    输入: a = “11”, b = “1”
    输出: “100”

    示例 2:

    输入: a = “1010”, b = “1011”
    输出: “10101”

    解答

    从最后一位开始运算,模拟一下进位就行了。

    代码很容易看懂,不多说啦。

    代码

    class Solution {
        public String addBinary(String a, String b) {
            if(a == null || a.length() == 0) return b;
            if(b == null || b.length() == 0) return a;
    
            StringBuilder stb = new StringBuilder();
            int i = a.length() - 1;
            int j = b.length() - 1;
            
            int c = 0;  // 进位
            while(i >= 0 || j >= 0 || c != 0) {
                if(i >= 0) c += a.charAt(i --) - '0';
                if(j >= 0) c += b.charAt(j --) - '0';
                stb.append(c % 2);
                c >>= 1;
            }
            
            return stb.reverse().toString();
        }
    }
    

    结果

    在这里插入图片描述

    展开全文
  • 关于这题目,相信很多人(包括我)本能反应是先将字符串转换为二进制数,然后再对其求解,最后再将求解的结果转换为字符串返回。 这里我们需要注意的题目并没有说明二进制字符串的长度,所以不管我们定义大的...

    一、题目

    二、题目分析

    关于这个题目,相信很多人(包括我)本能反应是先将字符串转换为二进制数,然后再对其求解,最后再将求解的结果转换为字符串返回。

    这里我们需要注意的题目并没有说明二进制字符串的长度,所以不管我们定义多大的变量去存储字符串转换成的结果,都有可能存在数据溢出的问题,并且,这样的方法效率会很低,因为我们需要将两个字符串转换为两个整数,在将相加后的结果转为为字符串。

    在这里我们可以直接使用字符串模拟二进制加法,然后将得到的结果直接保存到返回数组中。

    这里首先将数据对齐,然后按位依次相加,有进位就记录下来,若字符串的位不够了,则补0进行运算。

    例如“ 1011011 “ 和 “ 1011 ”相加,“ 1011 ”相对 “ 1011011 ”明显的缺位,需要我们补0进行计算,补充完之后得到下图所示结果。

    char * addBinary(char * a, char * b){
    
        int len_a = strlen(a);
        int len_b = strlen(b);
        int len = (len_a > len_b) ? (len_a) : (len_b);
        char *arr = (char *)malloc(sizeof(char) * (len + 2));
                                //len + 2 的原因是返回的字符串有一个结束符,并且要考虑到进位的关系预留一个位
        arr[++len] = '\0';      //++len是因为申请的考虑到进位的关系,所以结束符理应后移一位
    
        char carry = '0';       //进位标志位
        char pa = '0';          //a字符串当前值
        char pb = '0';          //b字符串当前值
    
        while (len > 1 || carry == '1')    //len = 2时,就是无数据溢出的情况,1的时候是溢出一位了
        {                                                       //重后往前计算
            pa = len_a > 0 ? (a[--len_a]) : '0';                //超出a字符串长度补‘0’
            pb = len_b > 0 ? (b[--len_b]) : '0';                //超出b字符串长度补‘0’
            arr[--len] = pa ^ pb ^ carry;                       //得到当前位数据
            carry = (pa & pb) | (pa & carry) | (pb & carry);    //得到进位标志位,只要有两个‘1’就进位
        } 
        
        return arr + len;   //arr申请字符串首地址,若len为0则有溢出数据,len为1则无数据溢出,我们申请空间的首位为空
    }

     

    仓促成文,不当之处,尚祈方家和读者批评指正。联系邮箱1772348223@qq.com

     

     

    展开全文
  • 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字1和0。 示例1: 输入: a = "11", b = "1" 输出: "100" 示例2: 输入: a = "1010&...

    给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0

    示例1:

    输入: a = "11", b = "1"
    输出: "100"

    示例2:

    输入: a = "1010", b = "1011"
    输出: "10101"

    思路:

    这道题目,为了能够通过更多的大数用例,我采用的是按位转化的方式。

    先按位取出两个字符串中的某位数字,然后转化成整型相加,temp保存进位值,保存到目标变量中。

    为了提高效率,(1)注意stringbuilder的使用;(2)注意变为等长字符串。

    java代码如下:

    class Solution {
        public String addBinary(String a, String b) {
            if(a.length() < b.length()){
                String s = a;
                a = b;
                b = s;
            }
            
            StringBuilder as = new StringBuilder(a);
            StringBuilder bs = new StringBuilder(b);
            
            for(int i = b.length(); i < a.length(); i++){ // 变为等长字符串
                bs.insert(0, '0');
            }
            
            int temp = 0;
            StringBuilder c = new StringBuilder();
            
            for(int i = a.length() - 1; i >= 0; i--){
                int flag = (int)as.charAt(i) + (int)bs.charAt(i) - 2 * (int)'0';
                if(temp == 1){
                    flag++;
                    temp = 0;
                }
                
                if(flag >= 2){
                    flag -= 2;
                    temp = 1;
                }
                
                c.insert(0, (char)(flag + '0'));
            }
            
            if(temp == 1){
                c.insert(0, '1');
            }
            
            return c.toString();
        }
    }

    结果:

    执行用时 : 2 ms, 在Add Binary的Java提交中击败了99.23% 的用户

    内存消耗 : 37.2 MB, 在Add Binary的Java提交中击败了0.88% 的用户

    展开全文
  • 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101" 因为按照...
  • 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例: 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出.
  • 奇偶分割数组分割一整数组,使得奇数在前偶数在后。样例给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。算法这题还是比较简单的,方法很,我们将数组循环遍历,将遍历中的偶数和奇数相互交换就ok了。public class...
  • 给定一单词组和一长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 字符,且左右两端对齐的文本。 你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能地往每行中放置单词。必要时可用...
  • 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 输入: a = “11”, b = “1” 输出: “100” 输入: a = “1010”, b = “1011” 输出: “10101” 解答 类似的...
  • 给出两个二进制数字,求和 输入 : 测试实例包括T组测试数据。(T <= 100) 每组测试数据两个二进制字符串A和B,分别代表两个二进制数字( 0 <= len(A) <= 20, 0 <= len(B) <= 20) 输出 : 两个二进制...
  • 师弟的星际加法   描述:   我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,  自从入职培训自我介绍后,大家就称我为“师弟”,我喜欢看... 然后给出两数字的字符串,请算出其求和
  • 程序员二进制计算器 v1.36

    热门讨论 2014-07-16 16:21:43
    (1)二进制数 以0b或0B开头,后面的0、1数字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 150 0B1001 0110% = 150% = 1.5 (2)八进制数 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)...
  • 思路:将n数化为二进制数,统计n数在每位二进制上1的个数,w的二进制取n数每位二进制上的(1或0)。 #include<bits/stdc++.h> using namespace std; #define pi acos(-1) #define mod 1000000007 ...
  • 假设十个数1 2 3 4 5 6 7 8 9 0那么这十个数正好有9空可以放“1”和“0”。(1,0分别代表有+号和无+)。那9空的放法不就是29(即000000000~111111111),29才512。枚举每一种情况时间也不。 #include<bits/stdc+...
  • 数位之和计算: ...x//10x // 10x//10 : 令 x 的十进制数向右移动一位,即删除位数字。 因此,可通过循环求得数位和 s ,数位和计算的封装函数如下所示: int sums(int x) int s = 0; while(x != 0) {
  • 从信息的角度看数字的表示和分割(败者树路时的层,树状数组求和时的次数,skiplist层的确定) 当用二进制表示数字时,除了进位关系外,还可以获得一些更弱但更有意义的联系存在。比如思考一任意的数字它的...
  • 将集合分成两部分,先对右边部分用二进制数枚举选取情况,然后求和之后用map存下来,键值为值,值为对应的二进制数 然后对左边部分用二进制数枚举选举情况,求和后用s-sum,看map中是否存在这键值,如果存在则...
  • 1) 输入数据为两一位十进制数A和B,A和B均为8421码表示,其中数据A由拨动开关SW7-SW4输入(SW7为MSB),数据B由SW3-SW0输入(SW3为MSB); 2) 电路的功能包括求和、比较大小、输出最大值和输出最小值四种;分别...
  • 一, 核心lowbit函数,得到一个数二进制最低位的1,代码很简单,但是是最核心的代码 int lowbit(int x) { return x & (-x); } 例如10的二进制是1010,返回值应该为2即二进制的10 二,求和函数getsum int ...
  • 不考虑低位进位,完成两一位二进制数相加,可以得到一和值S和一向上的进位C,这种逻辑电路称为半加器(Half-Adder),也称为摸2加或按位加 (2)全加器 考虑低位进位的一位二进制求和电路称为全加器,Ci为...
  • C阶段【01】 - C基础

    2016-03-27 15:24:00
    一、进制 进位方法:逢几进一(也就是几进制) 举例:十进制 12 ; 二进制 0b(计算机前缀) 0b1011 ; 八进制 0 073 ;十六进制 0x 0xABCDEF 十进制(X)转其它进制(Y... 将进制的上的每一个数 的 (几-...
  • 数制 一般分为二、八、十、十六这几种常见的(没错就是我现在能见到的) x进制就是0~x-1构成每一位,就如...因为是二进制,所以应该是二的多少倍乘以原来二进制的数字,如位应该是: 2的零次幂乘一。 求和就可以得
  • 权电阻网络D/A转换器

    2021-02-03 17:56:39
    在第一章中已经讲过,一个多二进制数中每一位的1所代表的数值大小称为这一位的权。如果一n位二进制数用表示,则最高位(MSB)到最低位(LSB)的权依次为。1.电路结构及原理下图是4位权电阻网络D/A转换器的原理图...
  • 220经典C语言源码

    千次下载 热门讨论 2013-08-16 23:35:01
    002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维...
  • 全加器

    千次阅读 2020-05-21 10:27:48
    全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位...
  • Leetcode题解 0019期

    2018-06-19 18:54:11
    给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例: 输入: a = "11", b = "1" 输出: "100" 输入: a = "1010", b = ...
  • 树状数组

    2016-10-05 15:59:18
    树状数组是一种比较神奇的数据结构, 更新、查询、求和等各种操作的复杂度都是O(logn);...lowbit函数就是一种位运算,lowbit能将一个二进制数高位的1全部去掉,只留下低位的1 不过博主刚刚学习树状数
  • 模数转换 模转换

    2010-11-02 19:31:33
    二进制数据其权系数的产生,依靠的是电阻,CD格式是16bit,即16位。所以采用16只电阻,对应16位中的每一位。参考电压源依次经过每电阻的电流和输入数据每位的电流进行加权求和即可得出模拟信号。这就是比特DAC。 ...
  • 220C语言经典代码

    2016-07-06 16:10:20
    002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

多个二进制数求和