







int Tennum(char a[],int b)//将输入的数字转换为10进制数
{
    int len, i, num;
    int sum = 0;
    len = strlen(a);//求字符长度
    for (i = 0; i < len; i++) 
    {
        if (a[i] >= '0' && a[i] <= '9')
        {
            num = a[i] - '0';
        }
        else if (a[i] >= 'A' && a[i] <= 'F')
        {
            num = a[i] - 'A' + 10;
        }
        sum = sum * b + num;
    }
    return sum;
}功能为将输入的数字通过字符串来存储,利用字符串的形式将不同的进制数转换为10进制数,并以整型将10进制数返回。
void Numchange(int m, int b)//将10进制数转化为任意进制数
{
    
    int n = m;
    int count = 0;
    if (m == 0) printf("0");
    while (n != 0)
    {
        n = n / b;
        count++;
    }
    int number;
    for (int i = count; i >= 1; i--)
    {
        number = m / (int)pow(b, i - 1);
        if (number < 10) {
            printf("%d", number);
        }
        else {
            printf("%c", number + 55);
        }
        m = m % (int)pow(b, i - 1);
    }
}功能为将10进制数转换为任意进制数。这个函数的思路是来自输出整数各位的数字,整数是十进制的,我改进了代码就可以实现转换成任意进制数。有用到数据类型的强制转换。
int judge2810(char a[], int b)//用来判断2,8,10进制数是否正确
{
    int len, i;
    len = strlen(a);
    int flag = 0;
    int x = b - 1 + 48;
    for (i = 0; i < len; i++)
    {
        if (a[i] >= 48 && a[i] <= x) {
            flag = 1;
        }
        else {
            flag = 0;
            break;
        }
    }
    return flag;
}
int judge16(char a[]) //用来判断16进制数是否正确
{
    int len, i;
    len = strlen(a);
    for (i = 0; i < len; i++)
    {
        if (a[i] < '0' || a[i]>'9' &&a[i] < 'A' || a[i]>'F') {
            return 0;
        }
    }
    return 1;
}这两个函数都是用来判断所输入的进制数是否符合相应的进制。由于16进制会更难写,所以没把两个函数合并在一起。
#include <stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    printf("进制转换器\n");
    printf("十六进制数字母大写\n");
    char a[100];
    int b;
    printf("请输入待转换数的进制:\n");
    scanf("%d", &b);
    printf("请输入待转换数\n");
    getchar();
    gets_s(a);
    int m;
    m = Tennum(a, b);
    if (b == 2) {
        if(judge2810(a,b))
        {
            printf("八进制数:\n");
            Numchange(m, 8);
            printf("\n");
            printf("十进制数:\n");
            printf("%d\n", m);
            printf("十六进制数:\n");
            Numchange(m, 16);
            printf("\n");
        }
        else {
            printf("Error\n请重新输入");
        }       
    }
    else if (b == 8) {
        if(judge2810(a, b))
        {
            printf("二进制数:\n");
            Numchange(m, 2);
            printf("\n");
            printf("十进制数:\n");
            printf("%d\n", m);
            printf("十六进制数:\n");
            Numchange(m, 16);
            printf("\n");
        }else{ 
            printf("Error\n请重新输入");
        }       
    }
    else if (b == 10) {
        if(judge2810(a, b))
        {
            printf("二进制数:\n");
            Numchange(m, 2);
            printf("\n");
            printf("八进制数:\n");
            Numchange(m, 8);
            printf("\n");
            printf("十六进制数:\n");
            Numchange(m, 16);
            printf("\n");
        }
        else {
            printf("Error\n请重新输入");
        }       
    }
    else if (b == 16) {
        if(judge16(a))
        {
            printf("二进制数:\n");
            Numchange(m, 2);
            printf("\n");
            printf("八进制数:\n");
            Numchange(m, 8);
            printf("\n");
            printf("十进制数:\n");
            printf("%d\n", m);
        }
        else {
            printf("Error\n请重新输入");
        }       
    }   
    return 0;
}利用字符串处理输入的进制数,根据用户所选进制来判断是否有错,如果没错就输出另外三种进制数。

int binaryconversion(int number) {
    if (number / 2 == 0) {
        return number % 2;
    }
    else {
        return number % 2 + binaryconversion(number / 2) * 10;
    }
}            int sum = 0;
            int product = 1;
            do {
                sum = sum + (number % 10) * product;
                number = number / 10;
                product = product * primitivesystem;
            } while (number);原文:https://www.cnblogs.com/yt0617/p/11808439.html