将整数转换为10进制、2进制、16进制的数字串
//author:yangyang
//main.c
#include "stdafx.h"
#define N 2 //可以改为8,即8进制
void jinzhi_10_2_8();
void jinzhi_16();
int number_str = 0;//存放进制的个数
int num_str[50] = {0};//存放进制数
int *pnum_str = num_str;//数组指针
int num = 0;//存放十进制数
int jinzhi = N;
int main()
{
printf("输入十进制数\n");
scanf_s("%d", &num);
printf("%d的10进制为%d\n", num, num);
jinzhi_10_2_8();
jinzhi_16();
return 0;
}
void jinzhi_16()
{
number_str = 0;//存放进制的个数
char num_str[50] = { 0 };//存放进制数
char *pnum_str = num_str;//数组指针
int yuzheng = num;//取整后的数字
for (int i = 0; i < 50; i++)//转二进制
{
int tmpchar = yuzheng % 16;//取余
yuzheng = yuzheng / 16;//取整
switch (tmpchar)//因考虑到16进制有abcdef,不采用+48的形式
{
case 0:*pnum_str = '0'; break;
case 1:*pnum_str = '1'; break;
case 2:*pnum_str = '2'; break;
case 3:*pnum_str = '3'; break;
case 4:*pnum_str = '4'; break;
case 5:*pnum_str = '5'; break;
case 6:*pnum_str = '6'; break;
case 7:*pnum_str = '7'; break;
case 8:*pnum_str = '8'; break;
case 9:*pnum_str = '9'; break;
case 10:*pnum_str = 'a'; break;
case 11:*pnum_str = 'b'; break;
case 12:*pnum_str = 'c'; break;
case 13:*pnum_str = 'd'; break;
case 14:*pnum_str = 'e'; break;
case 15:*pnum_str = 'f'; break;
default:break;
}
pnum_str++;//地址移位
number_str++;//加一位
if (yuzheng == 0)
{
break;
}
}
printf("%d的16进制为", num);
for (int i = 0; i < number_str; i++)
{
pnum_str--;
}
printf("\n");
}
void jinzhi_10_2_8()//二进制,八进制共用一个函数,根据需要更改N的值
{
int yuzheng = num;//取整后的数字
for (int i = 0; i < 50; i++)//转二进制
{
*pnum_str = yuzheng % N;//取余
yuzheng = yuzheng / N;//取整
pnum_str++;//地址移位
number_str++;//加一位
if (yuzheng == 0)
{
break;
}
}
printf("%d的%d进制为", num, jinzhi);
for (int i = 0; i < number_str; i++)
{
pnum_str--;
printf("%d", *pnum_str);
}
printf("\n");
}
当N=2时候的结果
当N=8时候的结果