利用栈 编写写把十进制正整数转换为一六进制数输出的算法。
时间: 2023-05-17 09:06:58 浏览: 258
以下是利用栈编写的将十进制正整数转换为十六进制数输出的算法:
```
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
void convertToHex(int n) {
Stack s;
initStack(&s);
while (n > 0) {
push(&s, n % 16);
n /= 16;
}
while (!isEmpty(&s)) {
int x = pop(&s);
if (x < 10) {
printf("%d", x);
} else {
printf("%c", 'A' + x - 10);
}
}
printf("\n");
}
int main() {
int n;
printf("Enter a decimal number: ");
scanf("%d", &n);
printf("The hexadecimal representation is: ");
convertToHex(n);
return 0;
}
```
这个算法利用了栈的后进先出的特性,将十进制正整数转换为十六进制数的过程中,先将每一位的余数压入栈中,然后再依次弹出栈中的元素,如果是小于10的数字,直接输出,否则输出对应的字母。