vs2017 C++程序实现:二进制数累加器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36556893/article/details/82659837

C++程序实现:二进制数累加器

一、目标

二、方法

三、代码

四、示例

五、总结


一、目标

输入一个任意长度的二进制数,输入累加次数,得到最终二进制数累加的结果。


二、方法

1.累加的原理无非就是0到1再到0的过程

2.累加时注意进位

3.我们用一个长度很长的一维数组存储输入的二进制数,例如:

  • 定义一个字符串变量c
  • 定义一个字符常量指针*cc
  • 定义一个一维整型数组指针*a

这些变量最终将数据存储在a中,例如:

  • c里存储着1001
  • 那么我们最终希望a[3]=1,a[2]=0,a[1]=0,a[0]=1

4.累加数据,如果数据每一位都是1,则需要将显示的结果扩展一位


三、代码

#include<iostream>
#include<string>
using namespace std;
int main() {
	string c;
	cout << "请输入一段二进制位数:" << endl;
	cin >> c;
	const char *cc = c.data();//将字符串型数据转化为字符数据
	int letterCount = strlen(cc);//计算字符串长度
	cout << "输入字符串长度:" << letterCount << endl;

	int *a = new int[999]; //动态创建一维数组,这里直接定义一个长度为999的二进制数
	cout << endl;
	cout << "输出每一位数据:" << endl;
	for (int i = 0; cc[i] != '\0'; i++) {
		a[letterCount - 1 - i] = cc[i] - '0';
		cout << "a[" << letterCount - 1 - i << "]" << a[letterCount - 1 - i] << endl;
	}
	cout << endl;
	cout << "请输入累加的次数:" << endl;
	int Sum = 0;//定义累加次数
	int sum = 0;
	cin >> Sum;

	while (sum < Sum) {
		int i = 0;
		int jinwei = 0;//当要进位时,计算二进制数据每一位为1的个数
		while ((i < letterCount) && (a[i] == 1)) {
			a[i++] = 0;
		}
		if (i < letterCount) {
			a[i] = 1;
		}
		cout << "累加第" << sum + 1 << "次:" << endl;
		for (int j = 0; j < letterCount; j++) {
			cout << "a[" << j << "]" << a[j] << endl;
			if (a[j] == 1) {
				jinwei++;//查看是否所有位数都是1
			}
			if (jinwei == letterCount) {
				letterCount++;//显示位数加1
				j++;//跳出循环
			}
		}
		sum++;//累加次数的个数加1
	}
	cout << "累加结果为:" << endl;
	for (int i = letterCount-1; i >= 0; i--) {
		cout << a[i] << "";
	}
	delete[]a;
	getchar();
	getchar();
	return 0;
}

四、示例

1.数据1001:

  • 输入数据:

  • 输入累加次数5:

2.输入数据10111001

  • 输入数据

  • 输入累加次数11:


五、总结

1.首先是对字符串转字符字符数组转换为整型数组的用法要熟悉

2.对于动态创建一维数组要熟悉

3.对于什么时候进位,什么时候结束计算要设定好

4.对于C++的理解和应用要熟悉,例如new一个之后要delete


本篇文章到此结束!!

猜你喜欢

转载自blog.csdn.net/qq_36556893/article/details/82659837
今日推荐