首頁 > 後端開發 > C++ > 主體

C++程序,使用遞歸將二進制數轉換為格雷碼

PHPz
發布: 2023-09-16 13:57:03
轉載
597 人瀏覽過

C++程序,使用遞歸將二進制數轉換為格雷碼

格雷碼或反射二進位碼是一種特殊類型的數字二進位表示形式,其中兩個連續值僅在一位上不同。例如,1和2的二進制等價物是01和10,這裡有兩個位正在改變。但在格雷碼中,1是01,2是11,只有一位在變化。在本文中,我們將了解如何使用 C 中的遞歸將給定的二進位數轉換為其等效的格雷碼。

將數字作為十進制整數傳遞

在第一個範例中,我們提供十進制數字。數字只有 0 和 1,但數字是十進制的。例如,如果我們想傳遞 6 作為輸入,我們傳遞 110(十進制的一百零 10),這相當於二進位表示的 6。該程式也類似地返回輸出。

演算法

  • 定義一個函數solve(),這將採用二進制數
  • 如果 n 為 0,則
    • 返回0
  • 如果結束
  • 最後 := n 的最後一位
  • second_last = n 的倒數第二位
  • 如果最後一位和倒數第二位不同,則
    • 輸入1並呼叫solve(n切割最後一位)
  • 否則
    • 輸入0並呼叫solve(n切割最後一位)
  • 如果結束
  • 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 連接,依此類推在。在範例中,我們提供了整數十進制數的輸入,輸出也採用整數十進位格式。可以透過採用字串類型輸入來解決相同的問題,該輸入可用於在需要時提供更大的輸入。

以上是C++程序,使用遞歸將二進制數轉換為格雷碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板