MST

星途 面试题库

面试题:C语言实现任意进制间转换

编写一个C语言程序,实现将一个给定数字从一种进制转换为另一种进制。用户输入原数字、原进制和目标进制,程序输出转换后的结果。例如,输入数字'12',原进制为8(八进制),目标进制为16(十六进制),程序应输出'A'。注意处理较大数字和非法输入情况。
34.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

// 检查输入是否合法
int isValidInput(const char *num, int base) {
    if (base < 2 || base > 16) return 0;
    for (int i = 0; i < strlen(num); i++) {
        if (isdigit(num[i])) {
            if (num[i] - '0' >= base) return 0;
        } else if (isupper(num[i])) {
            if (num[i] - 'A' + 10 >= base) return 0;
        } else if (islower(num[i])) {
            if (num[i] - 'a' + 10 >= base) return 0;
        } else {
            return 0;
        }
    }
    return 1;
}

// 将给定进制的数转换为十进制
long long toDecimal(const char *num, int base) {
    long long decimal = 0;
    int len = strlen(num);
    for (int i = 0; i < len; i++) {
        int digit;
        if (isdigit(num[i])) {
            digit = num[i] - '0';
        } else if (isupper(num[i])) {
            digit = num[i] - 'A' + 10;
        } else {
            digit = num[i] - 'a' + 10;
        }
        decimal = decimal * base + digit;
    }
    return decimal;
}

// 将十进制数转换为目标进制
void toTargetBase(long long decimal, int targetBase, char *result) {
    char digits[] = "0123456789ABCDEF";
    int index = 0;
    if (decimal == 0) {
        result[index++] = '0';
    } else {
        while (decimal > 0) {
            int remainder = decimal % targetBase;
            result[index++] = digits[remainder];
            decimal /= targetBase;
        }
    }
    result[index] = '\0';
    // 反转结果字符串
    for (int i = 0, j = index - 1; i < j; i++, j--) {
        char temp = result[i];
        result[i] = result[j];
        result[j] = temp;
    }
}

int main() {
    char num[100];
    int fromBase, toBase;

    printf("请输入原数字: ");
    scanf("%s", num);
    printf("请输入原进制: ");
    scanf("%d", &fromBase);
    printf("请输入目标进制: ");
    scanf("%d", &toBase);

    if (!isValidInput(num, fromBase)) {
        printf("非法输入\n");
        return 1;
    }

    long long decimal = toDecimal(num, fromBase);
    char result[100];
    toTargetBase(decimal, toBase, result);

    printf("转换后的结果: %s\n", result);

    return 0;
}