【問題描述】
用遞歸算法,把任一給定的十進制正整數轉換成八進制數輸出。
思路就是將該數不斷除以8取余,直到商為0。再將所得余數倒着輸出。到這輸出就想到棧,棧就可以用遞歸實現。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 int n; 8 void change(int x) 9 { 10 int r = x % 8; 11 x /= 8; 12 if(x != 0) change(x); 13 printf("%d", r); 14 } 15 int main() 16 { 17 scanf("%d", &n); 18 change(n); 19 return 0; 20 }
以此類推,就可以轉化成任意1到16進制的數。只不過當余數大於9時就要用 ABCDEF 代替。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 int n, m; 8 char cha[6] = {'A', 'B', 'C', 'D', 'E', 'F'}; 9 void change(int x, int y) 10 { 11 int r = x % y; 12 x /= y; 13 if(x != 0) change(x, y); 14 if(r < 10) printf("%d", r); 15 else printf("%c", cha[r - 10]); 16 } 17 int main() 18 { 19 scanf("%d%d", &n, &m); 20 change(n, m); 21 return 0; 22 }
輸入:156 16 輸出:9C