栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二进制求和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二进制求和

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

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

示例 1:

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

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

提示:

每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。

简单粗暴将其转化为字符数组里对应元素的求和处理

注意到’0‘对应ASCII码值为48

则可知,’0‘+1=’1’,’0‘+0=’1’,即‘0‘+(’1‘-’0‘)=’1‘,

也就是说当两个字符‘0’、‘1’运算时减去一个‘0’,就可以实现二进制中0+1=1

再具体处理一下进位的情况就可以实现二进制求和了

这是源代码

#include"iostream"
using namespace std;

class Solution
 {
	public:
	    string addBinary(string a, string b) 
		{
			int al=a.size();
			int bl=b.size(); 
			
			//保证两个字符串要等长,在短的字符串前补上0 
			while(al>bl)
			{
				b='0'+b;//string型变量之间的+运算相当于把两者拼起来即 a+b=ab 
				bl++;
			}
			while(al0;i--)//从低位开始处理对应的位,另外处理最高位需要进位的情况 
			{
				a[i]=a[i]-'0'+b[i];//a[i]=0+'0',或者1+'0'等等 
				if(a[i]>='2')//出现'1'+'1'的情况 
				{
					if(a[i]=='2')
					a[i]='0';
					else
					a[i]='1';//'11'+'11'='110'这种情况 
					a[i-1]+=1;//向高位进1 
				}
			}
			a[0]=a[0]-'0'+b[0];//将最高位进行相加 
			//最高位均为1的情况 
			if(a[0]>='2') 
			{
				if(a[0]=='2')
					a[0]='0';
					else
					a[0]='1';//'11'+'11'='110'这种情况 
					a='1'+a; 
					
			}
			
			return a;
		}
			
 };
 
 int main()
 {
 	Solution sum;
 	string a;
	string b;
	cout<<"a=";cin>>a;
	cout<<"b=";cin>>b;cout< 

这是伪代码

class Solution//定义一个类
	public:	//公共访问权限
		string  addBinary(string a, string b)//定义一个字符串型的函数来对a、b两个字符串进行求和			int al ← 字符串a的长度
			int bl ← 字符串b的长度
			
			//保证两个字符串要等长,在短的字符串前补上0,等长不会进行下面两个循环
			while al>bl		//字符串b短的情况
				b ← '0'+b	//string型变量之间的+运算相当于把两者拼起来即 a+b=ab
                bl ← bl+1	//b的长度加一
                
			while al='2' then
             		if a[i]='2' then
             		do a[i] ← '0'
             		else a[i]='3' then //这种情况为2+1,低位向高位已经进位过,即a[i+1]=b[i+1]=1
             		do a[i] ← '1'
             	do a[i-1] ← a[i-1]+1//向高位进1
                end if
                
             //现在处理最高位
             a[0] ← a[0]-'0'+b[0];//将最高位进行相加
            //最高位均为1的情况 
			if a[0]>='2' then
			//操作同上
            	if a[0]='2' then //'11'+'10'这种情况
				do	a[0] ← '0'
				else			//'11'+'11'这种情况
				do	a[0] ← '1'
					
			do	a ← '1'+a //在前面接上1,即最高位为1+1,需要再进位
			end if
			return a	//最后得到求和后的字符串

begin
	Solution sum
	string a,b
	input a
	input b
	output sum.addBinary(a,b) //调用上面类内的函数,输出a,b的和
	return 0
end
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号