C语言实现十进制到任意进制转换

Leo
Leo
发布时间:2026-10-13 | 4人浏览过
原创

介绍如何利用C语言基础语法实现十进制到二、八、十六进制等任意进制的转换,包含完整的可运行代码。

转换原理与准备

进制转换的核心逻辑基于“除基取余法”。对于十进制数 N,将其除以目标进制 w,所得余数即为当前位的数值,商继续参与下一轮运算,直到商为零为止。由于16进制中包含字母A-F,我们需要建立一个从0-15到对应字符的映射关系。char ku[16] 数组正是为此目的而设,它按顺序存储了 '0' 到 'F' 这16个字符。

第1步:定义变量与映射表

首先引入标准输入输出头文件 <stdio.h>。在主函数中,定义一个长度为16的字符数组 ku 用于映射十六进制以下的字符。同时声明两个数组或变量,zh[32] 用于暂存转换后的每一位余数,防止高位丢失;y 保存原始输入的十进制数以便后续打印,w 存储用户指定的目标进制。

#include<stdio.h>
int main()
{
 char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
 int zh[32],i=0,w,j;
 long int b,y;
 // ... 后续输入逻辑
}

第2步:获取用户输入

程序启动后,提示用户输入一个十进制整数和想要转换的目标进制(例如2或16)。使用 scanf 分别读取这两个值存入 y 和 w。在开始计算前,建议先将 y 的值备份给 b,因为后续的除法运算会改变 y 的值,导致原始数据丢失。

 printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n");
 scanf("%ld",&y); // 注意:原代码使用%d,建议改为%ld以匹配long int
 b=y;
 printf("请输入要转换为的进制:");
 scanf("%d",&w);
 printf("\n");
原文代码中 scanf("%d",&y) 存在格式说明符不匹配风险,因变量 y 为 long int,应使用 %ld 以避免未定义行为或栈溢出。已在重构中修正。

第3步:执行除基取余循环

使用 do-while 循环进行核心计算。只要 y 不为0,就执行以下操作:

  1. 将 y % w(即余数)存入索引为 i 的 zh 数组中。
  2. 将索引 i 加1,准备存储下一位。
  3. 将 y = y / w,更新被除数。
 do
 {
  zh[i]=y%w;
  i++;
  y=y/w;
 } while(y!=0); 

此循环结束后,zh 数组中从低地址到高地址依次存放的是原数的最低位到最高位。为了正确显示,我们需要逆序遍历该数组。

第4步:逆序输出结果

循环条件设置为 i-- 递减,直到索引小于0。每次取出 zh[i] 作为下标,访问 ku 数组得到对应的字符并打印。最后换行结束。

 printf("把十进制的%ld转换为%d进制:",b,w);
 for(i--;i>=0;i--)
 {
  j=zh[i];
  printf("%c",ku[j]);
 }
 printf("\n");
 return 0;

总结

这段代码展示了如何使用最基础的C语言特性完成进制转换。虽然功能简单,但它清晰地体现了算法逻辑。需要注意的是,原代码使用了 int 接收 long int 变量导致潜在的输入格式错误,实际使用时请确保格式占位符与变量类型一致。以上就是C语言实现十进制到任意进制转换的详细内容,更多关于C语言入门与基础算法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表