#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;
}