下面直接給上代碼: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表數組