格雷碼或反射二進位碼是一種特殊類型的數字二進位表示形式,其中兩個連續值僅在一位上不同。例如,1和2的二進制等價物是01和10,這裡有兩個位正在改變。但在格雷碼中,1是01,2是11,只有一位在變化。在本文中,我們將了解如何使用 C 中的遞歸將給定的二進位數轉換為其等效的格雷碼。
將數字作為十進制整數傳遞
在第一個範例中,我們提供十進制數字。數字只有 0 和 1,但數字是十進制的。例如,如果我們想傳遞 6 作為輸入,我們傳遞 110(十進制的一百零 10),這相當於二進位表示的 6。該程式也類似地返回輸出。
演算法
- 定義一個函數solve(),這將採用二進制數
- 如果 n 為 0,則
- 如果結束
- 最後 := n 的最後一位
- second_last = n 的倒數第二位
- 如果最後一位和倒數第二位不同,則
- 否則
- 如果結束
- solve() 函數結束
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #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;
}
|
登入後複製
輸出
1 2 3 4 | 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 連接,依此類推在。在範例中,我們提供了整數十進制數的輸入,輸出也採用整數十進位格式。可以透過採用字串類型輸入來解決相同的問題,該輸入可用於在需要時提供更大的輸入。
以上是C++程序,使用遞歸將二進制數轉換為格雷碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!