C语言------进制转换器

可以实现任意进制到任意进制的转换,感兴趣的同学可以做成图形化界面的。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
long long cf(long long, int);

int main(void)
{
    long long n, m;
    char zf[1000] = { 0 };
    printf("请入您要输入的数的进制:");
    scanf("%lld", &n);
    printf("请输入您要输入的数,十进制以上字母请大写:");
    getchar();
    gets(zf);
    printf("请入您要转换的进制:");
    scanf("%lld", &m);
    long long zh = 0;
    int zf_len = strlen(zf);
    int temp = zf_len - 1;
    int i;
    for (i = 0; i < zf_len; i++)//13579B
    {
        if ((zf[i] - '0') >= 0 && (zf[i] - '0') <= 9)
        {
            zh += ((long long)(zf[i] - '0')) * cf(n, temp--);
        }
        if (zf[i] >= 'A' && zf[i] <= 'F')
        {
            //printf("%d\n",zf[i]-'A'+10);
            zh += ((long long)(zf[i] - 'A' + 10)) * cf(n, temp--);

        }
        //printf("%d\n",zh);
    }
    //printf("%d\n",zh);
    int sc_len = 0;
    char scsz[1000] = { 0 };
    while (zh != 0)
    {
        long long tem = (zh % m);
        //	printf("%lld \n",tem);
        if (tem < 10)
        {
            scsz[sc_len] = tem + '0';
        }
        else
        {
            switch (tem)
            {
            case 10:scsz[sc_len] = 'A'; break;
            case 11:scsz[sc_len] = 'B'; break;
            case 12:scsz[sc_len] = 'C'; break;
            case 13:scsz[sc_len] = 'D'; break;
            case 14:scsz[sc_len] = 'E'; break;
            case 15:scsz[sc_len] = 'F'; break;
            }
        }
        sc_len++;
        zh /= m;
    }
    int k;
    for (k = sc_len - 1; k >= 0; k--)
    {
        printf("%c", scsz[k]);
    }
    return 0;
}

long long cf(long long n, int cs)
{
    if (cs == 0)
    {
        return 1;
    }
    else
    {
        long long i = 1;
        int j;
        for (j = 1; j <= cs; j++)
        {
            i *= n;
        }
        return i;
    }
}

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值