vs2017 C++程式實現:二進位制數累加器
阿新 • • 發佈:2018-12-09
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
本篇文章到此結束!!