【C语言】之实现整数的通用进制转换

/*
 * 文件名:baseConvert.c
 * 功能描述:实现将10进制整数转换为进制大于1的数
 * 编辑人:王廷云
 * 编辑日期:2017-1-1
*/
#include <stdio.h>

void convertBase(int num, int base);  // 通用进制转换函数

/* 从主函数开始 */
int main(void)
{
    int num;
    int base;   // 需要转换的进制

    fprintf(stdout, "请输入需要转换的正整数:");

    /* 获取用户需要转换的正整数 */
    while (1)
    {
    	if (fscanf(stdin, "%d", &num) != 1) // 检查输入是否为整数
    	{
    	    fprintf(stderr, "输入错误!请输入正整数:");
    	    while (getchar() != '\n');     // 去掉多余的非法字符
    	    continue;
    	}
    	else if (num < 0)                  // 检查输入是否为正数
    	{
    	    fprintf(stderr, "输入错误!请输入正整数:");
    	    continue;
    	}
        else
        {
            break;
        }
    }

    /* 获取用户需要转换的进制 */
    fprintf(stdout, "请输入需要转换的进制(大于1):");
    fflush(stdout);  // 为了避免缓冲区的bug而及时刷出
    while(1)
    {
        if (fscanf(stdin, "%d", &base) != 1)  // 检查输入是否为整数
        {
            fprintf(stderr, "输入错误!请输入正确的进制(大于1):");
            fflush(stdout);
            while (getchar() != '\n');       // 去掉多余的非法字符
            continue;
        }
        else if (base <= 1)                  // 进制必须大于1
        {
            fprintf(stderr, "输入错误!请输入正确的进制(大于1):");
            while (getchar() != '\n');       // 去掉多余的非法字符
            continue;
        }
        else
        {
            break;
        }
    }

    /* 调用转换函数并打印结果 */
    fprintf(stdout,"10进制数%d转换为%d进制数为: ", num, base);
    convertBase(num,base);
    fputc('\n', stdout);

    return 0;
}

/*
 * 函数名:convertBase
 * 函数功能:把10进制数转换为指定的进制数
 * 参数:1.需要转换的10进制整数 2.需要转换的进制
 * 返回值:无
*/
void convertBase(int num, int base)
{
    /* 第归结束条件 */
    if (num == 0)
    {
        return;
    }
    else
    {
        convertBase(num/base, base);
    }

    /* 打印结果 */
    if (base == 16)  // 处理16进制的特殊情况:16进制包含字母
    {
        fputc("0123456789abcdef"[num%base], stdout);
    }
    else            // 其它进制:直接打印
    {
        fprintf(stdout, "%d", num%base);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值