使用遞迴的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連線,以此類推。在示例中,我們以整數十進位制數作為輸入,輸出也以整數十進位制格式顯示。可以透過採用字串型別輸入來解決相同的問題,這可以在需要時用於提供更大的輸入。

更新於:2022年10月19日

736 次瀏覽

開始你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.