该实例要求使用C实现一个无符号整数到[2,16]进制数的转换。这个还是比较好想的,就是对该无符号整数不断的斤进制数d取余数,取商,一直做这样的运算,直到商为0为止,将所有的余数按照从后往前的顺序穿起来,就是转换后的进制数。
下面上我的代码:
#include <stdio.h>
/** 用于声明char数组的长度 **/
#define M (sizeof(unsigned int) * 8)
int trans(unsigned int m,int d,char s[]);
/**
* @brief main 将一个无符号整数转换成任意d进制数(2 << d << 16)
* @return
*/
int main(void)
{
/**
* 思路:将一个无符号整数m转换成任意d进制数,
* 则可以将m除以d,将余数从char数组的最后一位
* 向前保存,同时将商再除以d,以同样的方式进行处理
* 最后得到的数组就是所对应的d进制数
*/
unsigned int m;
printf("Please enter the digits you want to transform:\n");
scanf("%d",&m);
char str[33];
int i = 0;
printf("The translate results are:\n");
for(i = 2;i <= 16;i++){
int nums = trans(m,i,str);
printf("%d = ",m);
int j = 0;
for(j = 0;j < nums;j++){
printf("%c",str[j]);
}
printf("(%d)\n",i);
}
return 0;
}
/**
* @brief trans 用于对无符号整数转换
* @param m 要被转换的数字
* @param d 要被转换成的进制数
* @param s 存放被转换后的进制数的数组
* @return 返回转换后进制数的长度,也就是数组的长度
*/
int trans(unsigned int m,int d,char str[]){
if(d < 2 || d > 16){
str[0] = '\0';
return 0;
}
/** 用于保存进制数 **/
char digits[] = "0123456789ABCDEF";
int i = M;
int j = 0;
char buf[M+1];
/** 用于保存商 **/
int s = m;
buf[i] = '\0';
do{
buf[--i] = digits[s % d];
s = s / d;
}while(s);
for(j = 0;(str[j]=buf[i])!= '\0';j++,i++);
return j;
}
下面是我的运行结果截图:
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
用栈实现任意进制的转换 C++6.0运行 c程序
用c语言实现进制转换,分享给大家,谢谢指导
typedef struct /*定义栈结构*/ { DataType stack[maxsize]; /*存放栈中元素的数组*/ int top; /* 指向栈顶位置*/ }StackType;
一个在vc++6.0中运行的c语言源程序,可以将十进制转任意进制,这只是我自己写的源码,如发现错误希望能得到您的指点,谢谢!
整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出...
C++程序代码: 利用堆栈实现对任意进制的数的转换 由10进制转化为2,8,16进制
将非负十进制整数转化为八进制
这是一个十分巴适的程序,可将十进制数转换成其他任意进制的数!
c程序 十进制到任意进制的转换 看看怎么样
该程序段可以转化1到36之间任意数值的进制转化。 输入NumSysCv(num,con1,con2)即可将需要转化的num(con1进制数)转化为con2进制数。 之所以只能36个是因为目前我就输入了26个字母加0-9.如果有需要定义只需在代码...
设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出
本程序的执行效率未被验证和测试,仅用于初学者做算法研究
/* *功能实现任意二进制数的原码 反码 补码转换 *仅仅是字符串的操作,没有进行数字操作 *对-0的操作可能有问题 *ssfshine@gmail.com */
该程序可实现任意进制与10进制的互转, 也可以实现任意进制互相转换, 移植方便,程序是验证通过的。 绝对好用。
使用此程序可以直接将4字节的16进制数据转换成float或者double型数据,上传的是整个解决方案,下载后使用vs2010打开即可直接使用
本代码实现了十进制浮点数与IEEE745标准的32位二进制浮点数的互相转换,二进制浮点数有十六进制和二进制两者表示形式,
这是使用C语言和数据结构中栈的有关知识编写的C程序,具有较高的灵活性和实用性!可以将任意一个八进制整数转换成十进制数,非常好用!
把任意二进制(bin)文件转化为C的数组
利用栈的基本操作实现将任意一个十进制整数转化为 R 进制整数 算法提示: 1、定义栈可以是顺序存取结构或链式存储结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面...
4.13 十进制/二进制转化器 4.14 打印特殊图案 4.15 打印杨辉三角 4.16 复杂级数的前n项和 4.17 寻找矩阵中的“鞍点” 4.18 n阶勒让德多项式求解 4.19 递归反向输出字符串 4.20 一年中的第几天 第5章 数学趣题(一...