你的问题还真不好说,大方向没问题,细节上得加强。为了尽可能简单,我用了全局变量,除非必要,滥用它是一个非常不好的习惯。
自己要学会不使用全局变量,怎么实现相同的功能。另外了解一下使用%o,%x,%a这几种格式时printf的输出结果
int a[100] = { 0 }; // 转换后的值
int flag = 0; // 符号
// 把x转换为base进制数
int convert(int x, int base)
{
int i = 0;
flag = 0;
if (x < 0)
{
flag = 1;
x = -x; // 确保是非负整数
}
if (base <= 0)
{
printf("进制输入错误\n");
return 0;
}
while (x)
{
a[i++] = x % base;
x /= base;
}
i--;
return i; // 返回位数
}
int eight(int x)
{
return convert(x, 8);
}
int sixteen(int x)
{
return convert(x, 16);
}
/* 非常简陋,只处理16进制以下的情形 */
void printf_num(int i)
{
printf("\n");
if (flag)
printf("-"); // 负号
while (i >= 0)
{
if (a[i] > 9 && a[i] < 16)
printf("%c", a[i] + 55); // 输出A-F
else
printf("%d", a[i]); // 输出0-9
i--;
}
}
int main() {
int x, i;
printf("请输入一个十进制整数:");
scanf("%d", &x);
i = eight(x);
printf_num(i);
i = sixteen(x);
printf_num(i);
return 0;
}