#include <stdio.h>
#include <ctype.h>
#include <string.h>
// 將十進制轉換為另一個進制:十進位數值、要轉換的進制
int transformation ( int value , int number ) {
// 當value為零時,代表轉換結束
if ( value == 0 ) {
return 0 ;
}
else {
transformation ( value / number , number ) ; // value不為零,則繼續轉換
// 確認轉換的數值是否大於或等於10
int test = value % number ; // 轉換的數值
if ( test >= 10 ) {
printf ( "%c" , (char) ( test - 10 + 'A' ) ) ; // 將超過10的數值轉換為字母
}
else {
printf ( "%d" , test ) ; // 小於10則直接轉換
}
}
}
// 轉換為十進制的數值:數值、進制
int tenMode ( char value[] , int number ) {
int tenValue = 0 ; // 轉換後的十進位數值
int seat = 1 ; // 元素位置上的倍數
int element = 0 ; // 陣列的元素位置
for ( element = strlen ( value ) - 1 ; element >= 0 ; element -= 1 ) {
int test = 0 ; // 轉換後的數值
// 先確認是否為字母
if ( isalpha ( value[element] ) != 0 ) {
test = value[element] - 'A' + 10 ; // 字母轉換為數值
}
else {
test = value[element] - '0' ; // 字元數字轉換為數值
}
// 確認是否符合規則
if ( test >= number ) {
return -1 ; // 不合規則,回傳「-1」
}
else {
tenValue += test * seat ; // 符合規則,轉換為相對應的數值
}
seat *= number ; // 下一個位置的倍數
}
return tenValue ; // 回傳十進位的數值
}
int main ( void ) {
char string [100] = {} ; // 第一個進制的數值
gets ( string ) ; // 輸入數值
int a = 0 , b = 0 ; // 第一進制;第二進制
scanf ( "%d" , &a ) ; // 輸入第一進制
scanf ( "%d" , &b ) ; // 輸入第二進制
int aValue = tenMode ( string , a ) ; // 將第一進制的數值轉換為十進制
if ( aValue == -1 ) {
printf ( "Input Error" ) ; // 轉換後的數值為「-1」代表不合規則
}
else if ( aValue == 0 ) {
printf ( "0" ) ; // 如果aValue為零,就不用進行轉換
}
else {
transformation ( aValue , b ) ; // 將aValue轉換為b進制
}
puts ( "" ) ;
system ( "pause" ) ;
return 0 ;
}