输入两个二进制数,输出它们的和(二进制)
例如,输入“11 1”,输出“100”;
例如,输入“11 111”,输出“1010”;
1 #include<iostream> 2 #include<string.h> 3 #include<vector> 4 using namespace std; 5 int main(){ 6 char a[20], b[20], n=0;//n表示是否进位,n=1表示进位,n=0表示不进位 7 vector<int> sum; 8 cin>>a>>b; 9 int an=strlen(a); 10 int bn=strlen(b); 11 int j=bn-1; 12 int i=an-1;//从ab的低位开始运算 13 for(; i>=0; i--){ 14 if((a[i] - '0') + (b[j] - '0')+n>1){//用a[i]-'0'把字符转化为整数 ,大于1表示要进位 15 sum.push_back((a[i] - '0') + (b[j] - '0')+n-2);//把进位后的结果加到存进vector中 16 n=1; 17 }else{ 18 sum.push_back((a[i] - '0') + (b[j] - '0')+n);//不进位就把和直接存入vector当中 19 n=0; 20 } 21 j--; 22 if(j<0){//表示第二个数b所有位数都求和过了,没有数再和a进行比较,跳出循环 23 i--; 24 if(i<0&&n==1){ 25 sum.push_back(1); 26 } 27 break; 28 } 29 } 30 while(i>=0){//表示第二个数b所有位数都求和过了,此时把a中还未求和的数再进行运算 31 if((a[i]-'0')+n>1){//需进位 32 sum.push_back((a[i]-'0')+n-2); 33 n=1; 34 }else{ 35 sum.push_back((a[i]-'0')+n); 36 n=0; 37 38 } 39 i--; 40 if(i<0&&n==1){ 41 sum.push_back(1); 42 } 43 } 44 while(j>=0){//表示第一个数a所有位数都求和过了,此时把b中还未求和的数再进行运算 45 if((b[j] - '0')+n>1){//进位 46 sum.push_back((b[j] - '0')+n-2); 47 n=1; 48 }else{ 49 sum.push_back((b[j] - '0')+n); 50 n=0; 51 } 52 j--; 53 if(j<0&&n==1){ 54 sum.push_back(1); 55 } 56 } 57 58 //遍历vector.倒着把每一位数输出 59 int m=sum.size(); 60 for(int i=m-1; i>=0; i--){ 61 cout<<sum[i]; 62 } 63 64 return 0; 65 }