1. 程式人生 > >vs2017 C++程式實現:二進位制數累加器

vs2017 C++程式實現:二進位制數累加器

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

本篇文章到此結束!!