C++遞迴實現十進位制轉二進位制、八進位制、十六進位制
阿新 • • 發佈:2018-12-19
1.轉二進位制與八進位制分析
我們最熟悉不過的就是短除法將十進位制轉二進位制,將餘數倒著輸出便是該是十進位制的二進位制數,那麼很容易想到拿十進位制數n%2(或者8)這樣可以得到最高位的二進位制(八進位制)數,然後將n/=2(8)繼續取餘,這樣就可以得到下一位,我這裡使用字元陣列儲存,因為2進位制只有0-1兩個字元,八進位制則是0-7 8個字元。
2.實現二進位制轉換程式碼:
#include<iostream> #include<cstring> using namespace std; int i = 0; void turn(int n,int *c) { if(n == 0) return; else { c[i]=n%2; i++; turn(n/2,c); } } int main() { int n; cin>>n; int cc[10000]; if(n == 0) { cout<<'0'; } turn(n,cc); for(int j = i-1;j>=0;j--) cout<<cc[j]; return 0; }
3.實現十進位制轉八進位制程式碼:
#include<iostream> #include<cstring> using namespace std; int i = 0; void turn(int n,int *c) { if(n == 0) return; else { c[i]=n%8; i++; turn(n/8,c); } } int main() { int n; cin>>n; int cc[10000]; if(n == 0) { cout<<'0'; } turn(n,cc); for(int j = i-1;j>=0;j--) cout<<cc[j]; return 0; }
4.十進位制轉十六進位制分析:
因為十六進位制從10以後依次為’A’,’B’,’C’,’D’,’E’,’F’. 在這裡不適合用字元去處理,因為ASCALL值的字元不會存’10’,我們採用字串進行操作。我們判斷n%16的餘數是否大於等於10然後在字串末尾加上(‘A’+(n%16)-10)即可。
5.十進位制轉十六進位制程式碼:
#include<iostream> #include<cstring> using namespace std; int i = 0; string str; void turn(int n) { if(n == 0) return ; else { int j = (n%16); if(j == 0) str+="0"; if(j>0&&j<10) str+=(j+'0'); if(j>=10) { str += ('A'+(j-10)); } turn(n/16); } } int main() { int n; cin>>n; if(n == 0) { cout<<'0'; } turn(n); for(int j = str.length()-1;j>=0;j--) cout<<str[j]; return 0; }