cpp
#include <stdio.h>
#include <malloc.h>
/*
* 数制转换
* 把 一个数 转成任意进制
* 本程序提供 2 8 16 任意进制转换,使用栈的特性
*/
// n输入的十进制整数 d转成的进制
int n, d;
// 菜单界面
void menu()
{
printf("请输入一个十进制整数: \n");
scanf("%d",&n);
if (n < 0)
{
puts("目前仅支持正整数~");
exit(1);
}
printf("======== 请选择转成N进制输出 ========\n");
choose:
printf("1. 转二进制\n");
printf("2. 转八进制\n");
printf("3. 转十六进\n");
scanf("%d",&d);
if(d == 1) d = 2;
else if(d == 2)d = 8;
else if(d == 3)d = 16;
else
{
puts("---- 输入有误请重试 ----");
goto choose;
}
}
// 函数用于处理进制转换
void f(int x,int base) {
int tt = 0; // tt = 0表示栈空
int stk[100];
while (x)
{
int t = x % base;
x /= base;
stk[++tt] = t;
}
while (tt)
{
int num = stk[tt--];
// 处理十六进制 A ~ F
if(num >= 10) printf("%c",(55 + num));
else printf("%d",num);
// 二进制换行
if(d == 2 && tt % 4 == 0)printf(" ");
}
}
int main()
{
// 菜单
menu();
// 转换函数
f(n,d);
return 0;
}