void conversion(int N) {//十进制转换成八进制数 Stack S;初始化堆栈;初始化空栈S while(N) {//当N非零时,循环 Push(S,N%8); //把N与8求余得到的八进制数压入栈S N=N/8; //N更新为N与8的商 } while(!StackEmpty(S))//当栈S非空时,循环 { Pop(S,e); //弹出栈顶元素e printf( “%d”, e ); //输出e } } void main( void ) { conversion( 200 ); }改进进制转换函数,使之能实现整数(正、0、负)的任意进制(2到62,大于9时,用A-Z、a-z表示)的转换
时间: 2024-02-06 19:03:28 浏览: 86
好的,我可以帮你改进进制转换函数。你可以参考下面的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
#define MAX_CHARACTERS 62
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void InitStack(Stack *S) {
S->top = -1;
}
int StackEmpty(Stack S) {
return S.top == -1;
}
int StackFull(Stack S) {
return S.top == MAX_STACK_SIZE - 1;
}
void Push(Stack *S, int x) {
if (StackFull(*S)) {
printf("Stack overflow!\n");
exit(1);
}
S->data[++S->top] = x;
}
void Pop(Stack *S, int *x) {
if (StackEmpty(*S)) {
printf("Stack underflow!\n");
exit(1);
}
*x = S->data[S->top--];
}
void conversion(int N, int radix) {
int sign = 1;
if (N < 0) {
sign = -1;
N = -N;
}
char result[MAX_STACK_SIZE];
int i = 0;
Stack S;
InitStack(&S);
while (N) {
Push(&S, N % radix);
N /= radix;
}
while (!StackEmpty(S)) {
int x;
Pop(&S, &x);
if (x >= 0 && x <= 9) {
result[i++] = x + '0';
} else {
result[i++] = x - 10 + 'A';
}
}
if (i == 0) {
result[i++] = '0';
}
if (sign == -1) {
result[i++] = '-';
}
result[i] = '\0';
strrev(result);
printf("%s\n", result);
}
int main(void) {
int N = -200;
int radix = 16;
conversion(N, radix);
return 0;
}
```
这个函数的参数包括要转换的整数 N 和要转换的进制 radix。函数会将 N 转换为 radix 进制,并输出结果。如果 N 是负数,函数会在结果前加上负号。如果结果为 0,函数会输出一个字符 '0'。
这个函数使用了栈来进行进制转换。具体来说,它对 N 进行一系列除 radix 取余的操作,并将余数依次压入栈中。然后,它从栈中依次弹出余数,并将余数转换为对应的字符。最后,函数将这些字符反转,并输出结果。
注意,这个函数只支持进制在 2 到 62 之间的转换。如果要支持更大的进制转换,需要将字符集扩展到更多字符。你可以根据需要修改 MAX_CHARACTERS 宏定义来扩展字符集。
阅读全文