概述
【题目】如上
【思路一】先将二进制转为十进制,然后十进制求和,最后再化成二进制
【思路二】重点:使用string类进行字符串操作,变成等长的字符串,然后进行相对应位置的加法运算。
【代码一】
#include<iostream>
using namespace std;
int main()
{
char a[100], b[100];//先定义了一个较长的字符型数组
while (cin >> a >> b)
{
//二进制转十进制。从首位(左)往右方向运算,将首位置的二进制数乘2加上下一位赋给n,然后下标加1,然后将n*2加下一位二进制数,重复前面的算法
int a1 = 0, b1 = 0;
for (int i = 0; a[i] != 0; i++)
{
a1 = a1 * 2;
if (a[i] == '1')
{
a1 = a1 + 1;
}
if (a[i] == '0')
{
a1 = a1 + 0;
}
}
for (int i = 0; b[i] != 0; i++)
{
b1 = b1 * 2;
if (b[i] == '1')
{
b1 = b1 + 1;
}
if (b[i] == '0')
{
b1 = b1 + 0;
}
}
int sum = a1 + b1;//十进制求和
int c[100];
int k = 0;
//再将十进制的数转为二进制
while (sum > 0)
{
c[k] = sum % 2;
sum = sum / 2;
k++;
}
for (int i = k - 1; i >= 0; i--)
{
cout << c[i];
}
cout << endl;
}
}
【代码二】
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string a, b;//利用string类来存储二进制数字串
while (cin >> a >> b)
{
int a1 = a.size();//求出二进制数的长度
int b1 = b.size();
while (a1 < b1) //比较两个字符串的长度,谁短就在前添加0
{
a = '0' + a;
a1++;
}
while (a1 > b1)
{
b = '0' + b;
b1++;
}
for (int j = a1 - 1; j > 0; j--) //从最后一位进行和运算,当运行到首位就退出
{
a[j] = a[j] - '0' + b[j];//重点:string类中的字符串以ASCII值进行存储,所以进行加减时先要减去'0',再进行运算。'0'=48
if (a[j] >= '2')
{
a[j] = (a[j] - '0') % 2 + '0';//二进制当大于2的时候就进位,取余进行加运算
a[j - 1] = a[j - 1] + 1;//前一位一定加1
}
}
a[0] = a[0] - '0' + b[0]; //首位独立运算
if (a[0] >= '2')
{
a[0] = (a[0] - '0') % 2 + '0';
a = '1' + a;//在字符串前直接加1
}
cout << a << endl;
}
}
最后
以上就是忧虑毛巾为你收集整理的【成长记录】C++题目——二进制求和的全部内容,希望文章能够帮你解决【成长记录】C++题目——二进制求和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复