要求用C语言实现函数,借助如下自定义栈SqStack将一个正整数N转换为k(2<=k<=16)进制数并输出。输出时用大写字母A、B、C、D、E、F分别表示10、11、12、13、14、15。函数接口定义: void conversion(int N, int k);
时间: 2023-12-28 22:47:09 浏览: 34
以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef struct {
int *base;
int *top;
int stackSize;
} SqStack;
void InitStack(SqStack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if (!S->base) {
exit(0);
}
S->top = S->base;
S->stackSize = STACK_INIT_SIZE;
}
void Push(SqStack *S, int e) {
if (S->top - S->base >= S->stackSize) {
S->base = (int *)realloc(S->base, (S->stackSize + STACK_INCREMENT) * sizeof(int));
if (!S->base) {
exit(0);
}
S->top = S->base + S->stackSize;
S->stackSize += STACK_INCREMENT;
}
*(S->top) = e;
S->top++;
}
int Pop(SqStack *S) {
int e;
if (S->top == S->base) {
return -1;
}
S->top--;
e = *(S->top);
return e;
}
void conversion(int N, int k) {
SqStack S;
InitStack(&S);
while (N) {
Push(&S, N % k);
N /= k;
}
while (S.top != S.base) {
int e = Pop(&S);
if (e >= 10) {
printf("%c", 'A' + e - 10);
} else {
printf("%d", e);
}
}
}
int main() {
int N = 17;
int k = 2;
conversion(N, k);
printf("\n");
return 0;
}
```
这里我们使用了一个自定义栈SqStack来存储转换后的k进制数。首先将N除以k的余数压入栈中,直到N为0为止。然后依次弹出栈中的元素并输出,如果元素大于等于10,就输出对应的大写字母。