#include <stdio.h>
#define M (sizeof(unsigned int) * 8)/** 用于声明char数组的长度 **/
int trans(unsigned int m,int d,char s[]);
/**
* @brief main 将一个无符号整数转换成任意d进制数(2 << d << 16)
* @return
*/
int main(void)
{
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;
}
int trans(unsigned int m,int d,char str[]){
if(d < 2 || d > 16){
//将s置为0
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...while
do{
buf[--i] = digits[s % d];
s = s / d;
}while(s);
//对数组s进行赋值
for(j = 0;(str[j]=buf[i])!= '\0';j++,i++);
return j;
}
进制转换
最新推荐文章于 2021-05-20 05:49:46 发布