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);
    }
}

发布了102 篇原创文章 · 获赞 83 · 访问量 18万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览