使用遞迴的C++程式將二進位制數轉換為格雷碼
格雷碼或反射二進位制碼是一種特殊的二進位制數表示方法,其中兩個連續的值只有一位不同。例如,1和2的二進位制等價分別為01和10,這裡改變了兩位。但在格雷碼中,1是01,2是11,只有一位改變。在本文中,我們將學習如何使用C++中的遞迴將給定的二進位制數轉換為其格雷碼等價。
傳遞十進位制整數作為數字
在第一個示例中,我們以十進位制提供數字。數字只有0和1,但數字是十進位制的。例如,如果我們想傳遞6作為輸入,我們傳遞110(十進位制的一百一十),它在二進位制表示中等於6。程式也以類似的方式返回輸出。
演算法
- 定義一個函式solve(),它將接收一個二進位制數
- 如果n為0,則
- 返回0
- 結束if
- last := n的最後一位
- second_last = n的倒數第二位
- 如果最後一位和倒數第二位不同,則
- 放置1並呼叫solve(去掉最後一位的n)
- 否則
- 放置0並呼叫solve(去掉最後一位的n)
- 結束if
- solve()函式結束
示例
#include <iostream> using namespace std; int solve( int n ) { if( n == 0 ) return 0; int last = n % 10; int second_last = (n / 10) % 10; if( (last && !second_last) || (!last && second_last) ) { return (1 + 10 * solve( n / 10 )); } return (10 * solve( n / 10 )); } int main() { cout << "Gray code for the number 2 (10) is: " << solve( 10 ) << endl; cout << "Gray code for the number 6 (110) is: " << solve( 110 ) << endl; cout << "Gray code for the number 13 (1101) is: " << solve( 1101 ) << endl; cout << "Gray code for the number 93 (1011101) is: " << solve( 1011101 ) << endl; }
輸出
Gray code for the number 2 (10) is: 11 Gray code for the number 6 (110) is: 101 Gray code for the number 13 (1101) is: 1011 Gray code for the number 93 (1011101) is: 1110011
結論
格雷碼或反射二進位制碼可以透過對連續位應用異或運算來找到。透過取給定數字的最後兩位來實現相同的功能,當它們不相同時,遞迴呼叫函式並傳遞除最後一位以外的數字,結果將與1連線,否則與0連線,以此類推。在示例中,我們以整數十進位制數作為輸入,輸出也以整數十進位制格式顯示。可以透過採用字串型別輸入來解決相同的問題,這可以在需要時用於提供更大的輸入。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP