C++實現任意進制的相互轉換

進制轉換是計算機內部時時刻刻都在進行活動,本篇文章也是進制轉換的算法介紹,不過不一樣的是我想利用ascll編碼實現2到61之間任意進制的相互轉換,更大進制的表示方法只不過是十六進制表示方法的延伸:用字母A到Z表示整數10到35,字母a到z表示整數36到61。這樣就能夠表示2到61之間的任意進制啦,爲方便理解ascll表放在代碼後面,能夠自行查看。

 

下面直接給上代碼:ios

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 void decToOther(int tmp, int b);
 5 void otherToDec(int a, char str[], int b);
 6 const int MAXSIZE = 10000;
 7 int a, b;
 8 char str[MAXSIZE];
 9 int main()
10 {
11     while (cin >> a >> str >> b)          //a、s、b分別爲目前的進制、待轉換的內容、目標進制
12         otherToDec(a, str, b);            //統一先轉換爲10進制
13     return 0;
14 }
15 
16 void otherToDec(int a, char str[], int b)
17 {//任意進制轉換爲十進制 
18     int tmp = 0;            //tmp保存十進制的值 
19     int c = 1;          //初始化權值爲1
20     for (int i = strlen(str) - 1; i >= 0; i--)
21     {
22         int x;          //存放當前位的數字 
23         if (str[i] >= 'A' && str[i] <= 'Z')         //字母A~Z表示整數10~35
24             x = str[i] - 'A' + 10;
25         else if (str[i] >= 'a' && str[i] <= 'z')            //字母a~z表示整數36~61
26             x = str[i] - 'a' + 36;
27         else
28             x = str[i] - '0';
29         tmp = tmp + x * c;          //累加將各個位上的值
30         c = c * a;         //更新權值
31     }
32     decToOther(tmp, b);         //由十進制轉換爲目標進制
33 }
34 
35 void decToOther(int tmp, int b)
36 {//十進制轉換爲任意進制 
37     int i = 0;
38     int s[MAXSIZE] = { 0 };
39     while (tmp != 0)            //十進制轉換爲目標進制算法,結果放到數組s中
40     {
41         s[i] = tmp % b;
42         tmp= tmp / b;
43         i++;
44     }
45     cout << a << "進制數" << str << "" << b << "進製表示爲:";
46     for (; i > 0; i--)          //利用ascll編碼實現字母表示兩位整數,並倒序輸出轉換結果
47     {
48         if (s[i - 1] > 9 && s[i - 1] <= 35)
49             cout << (char)(s[i - 1] + 55);          //當s[i-1]爲整數10時(char)(10+55)='A',輸出'A'
50         else if (s[i - 1] > 35 && s[i - 1] <= 61)
51             cout << (char)(s[i - 1] + 61);          //當s[i-1]爲整數36時(char)(36+61)='a',輸出'a'
52         else
53             cout << s[i - 1];           //個位數輸出自己
54     }
55     cout << '\n';
56 }

 

示例:算法

 

 

附:ascll表數組

相關文章
相關標籤/搜索