c语言用栈写一个十、十六进制转换的程序
时间: 2024-05-03 18:21:44 浏览: 109
以下是一个使用栈实现十、十六进制转换的程序,可以将十进制数转换为十六进制数或将十六进制数转换为十进制数。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isStackEmpty(Stack *s) {
return s->top == -1;
}
int isStackFull(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
void push(Stack *s, int value) {
if (isStackFull(s)) {
fprintf(stderr, "Error: stack is full\n");
exit(EXIT_FAILURE);
}
s->data[++s->top] = value;
}
int pop(Stack *s) {
if (isStackEmpty(s)) {
fprintf(stderr, "Error: stack is empty\n");
exit(EXIT_FAILURE);
}
return s->data[s->top--];
}
int main() {
Stack s;
initStack(&s);
int n, base;
char input[20];
printf("Enter a number: ");
scanf("%s", input);
printf("Enter the base of the number (10 or 16): ");
scanf("%d", &base);
if (base == 10) {
n = atoi(input);
while (n > 0) {
push(&s, n % 16);
n /= 16;
}
printf("Hexadecimal representation: ");
while (!isStackEmpty(&s)) {
int digit = pop(&s);
if (digit < 10) {
printf("%d", digit);
} else {
printf("%c", digit - 10 + 'A');
}
}
printf("\n");
} else if (base == 16) {
int len = strlen(input);
for (int i = 0; i < len; i++) {
int digit;
if (input[i] >= '0' && input[i] <= '9') {
digit = input[i] - '0';
} else if (input[i] >= 'A' && input[i] <= 'F') {
digit = input[i] - 'A' + 10;
} else if (input[i] >= 'a' && input[i] <= 'f') {
digit = input[i] - 'a' + 10;
} else {
fprintf(stderr, "Error: invalid input\n");
exit(EXIT_FAILURE);
}
push(&s, digit);
}
int decimal = 0;
int multiplier = 1;
while (!isStackEmpty(&s)) {
decimal += pop(&s) * multiplier;
multiplier *= 16;
}
printf("Decimal representation: %d\n", decimal);
} else {
fprintf(stderr, "Error: invalid base\n");
exit(EXIT_FAILURE);
}
return 0;
}
```
程序先提示用户输入一个数字和数字的进制,然后使用栈将其转换为另一种进制。如果用户输入的进制无效,程序会报错并退出。如果用户输入的数字不合法(例如包含非法字符),程序也会报错并退出。
阅读全文