close

#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 ;
    

 

arrow
arrow
    文章標籤
    C
    全站熱搜
    創作者介紹
    創作者 幻空 的頭像
    幻空

    幻空的世界

    幻空 發表在 痞客邦 留言(0) 人氣()