二进制整数相加(储存在数组中)详见算法导论2.1—4

本文介绍了一种使用C++实现二进制加法的方法,通过定义特定长度的数组存储二进制数,并利用字符串流将输入的二进制字符串转换为整数,再分解为数组元素。随后进行逐位相加并考虑进位,最终输出二进制加法的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <sstream>
#include <string>
#include <math.h>
#define LENGTH 8//******定义常量*******int型上限********
using namespace std;
//数据结构2.1_4 二进制相加

int main()
{
	bool flag = 0;
	int A[LENGTH+1];
	int B[LENGTH+1];
    int C[LENGTH+1];
	A[0]=B[0]=0;
	string strA,strB;


//输入二进制数A,B
	do{
		cout <<"请输入"<<LENGTH<<"位二进制数A:"<<endl;
		
		cin >>strA;
	  }
	while(strA.length()!=LENGTH);

	do{
		cout <<"请输入"<<LENGTH<<"位二进制数B:"<<endl;
		
		cin >>strB;
	  }
	while(strB.length()!=LENGTH);
	
    istringstream isA(strA); //构造输入字符串流,流的内容初始化为字符串 
	int numA; 
	isA >> numA;
	//cout << numA;

    istringstream isB(strB); //构造输入字符串流,流的内容初始化为字符串 
	int numB; 
	isB >> numB;
	//cout << numB;


//存入数组
	for(int i = 1;i<=LENGTH;i++)
	{
  
	   A[i] = numA/(int(pow(10,LENGTH-i)));
	   //cout << A[i];
	   numA = numA%(int(pow(10,LENGTH-i)));

    }
	for(int i = 1;i<=LENGTH;i++)
	{
  
	   B[i] = numB/(int(pow(10,LENGTH-i)));
	   //cout << B[i];
	   numB = numB%(int(pow(10,LENGTH-i)));

    }

//进行二进制计算
	for (int i = LENGTH;i>=0 ;i-- )
	{
		if((A[i]&&B[i])||(A[i]&&flag)||(flag&&B[i]))
			{
				C[i]=(A[i]+B[i]+flag)%2;
				flag=(A[i]+B[i]+flag)/2;
					
            }
		else
			{
				C[i]=A[i]+B[i]+flag;
				flag=0;
			}
		
	}
	for (int i =0;i <= LENGTH; i++)
	{
		cout <<"进行二进制相加后结果为:"<< C[i]; 
	}

	return 0;
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值