下面是一个使用C语言实现进制转换的代码,可以将任意进制的数转换为十进制数,并将十进制数转换为任意进制的数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAX_LEN 100

// 将字符转换为数字
int charToNum(char c)
{
    if (c >= '0' && c <= '9')
        return c - '0';
    if (c >= 'a' && c <= 'z')
        return c - 'a' + 10;
    if (c >= 'A' && c <= 'Z')
        return c - 'A' + 10;
    return -1;
}

// 将数字转换为字符
char numToChar(int n)
{
    if (n >= 0 && n <= 9)
        return n + '0';
    if (n >= 10 && n <= 35)
        return n - 10 + 'a';
    return '\0';
}

// 将任意进制的数转换为十进制数
double anyToDecimal(char *num, int base)
{
    int len = strlen(num);
    double result = 0.0;
    for (int i = 0; i < len; i++)
    {
        int n = charToNum(num[i]);
        if (n < 0 || n >= base)
        {
            printf("Error: invalid input!\n");
            exit(1);
        }
        result += n * pow(base, len - i - 1);
    }
    return result;
}

// 将十进制数转换为任意进制的数
char *decimalToAny(double num, int base)
{
    static char result[MAX_LEN];
    int integerPart = (int)num;
    double fractionPart = num - integerPart;
    int i = 0;
    // 转换整数部分
    while (integerPart > 0)
    {
        int remainder = integerPart % base;
        result[i++] = numToChar(remainder);
        integerPart /= base;
    }
    result[i] = '\0';
    // 翻转字符串
    int len = strlen(result);
    for (int j = 0; j < len / 2; j++)
    {
        char tmp = result[j];
        result[j] = result[len - j - 1];
        result[len - j - 1] = tmp;
    }
    // 添加小数部分
    if (fractionPart > 0)
    {
        result[i++] = '.';
        while (fractionPart > 0 && i < MAX_LEN - 1)
        {
            fractionPart *= base;
            int integerPart = (int)fractionPart;
            result[i++] = numToChar(integerPart);
            fractionPart -= integerPart;
        }
        result[i] = '\0';
    }
    return result;
}

int main()
{
    char num[MAX_LEN];
    int fromBase, toBase;
    printf("Enter a number: ");
    scanf("%s", num);
    printf("Enter the base of the number: ");
    scanf("%d", &fromBase);
    printf("Enter the base to convert to: ");
    scanf("%d", &toBase);
    double decimalNum = anyToDecimal(num, fromBase);
    char *result = decimalToAny(decimalNum, toBase);
    printf("The converted number is: %s\n", result);
    return 0;
}

这段代码首先定义了两个函数charToNumnumToChar,它们分别用于将字符转换为数字和将数字转换为字符。然后定义了两个核心函数anyToDecimaldecimalToAny,它们分别用于将任意进制的数转换为十进制数和将十进制数转换为任意进制的数。最后在main函数中读取用户输入的数和进制,并调用上述函数进行转换并输出结果

使用c语言数据结构写一个代码该代码可实现输入一个带小数的数据可进行各种进制转换然后输出转换后的数据

原文地址: https://www.cveoy.top/t/topic/hsGj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录