任意给定一个 M 进制的数 x,实现如下要求: (1) 求出此数 x 的 10 进制值; (2) 实现对 X 向任意的一个非 M 进制的数的转换; (3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)的C实现
时间: 2024-05-12 19:14:56 浏览: 37
方法一:使用栈
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
void init(Stack *stack) {
stack->top = -1;
}
int is_empty(Stack *stack) {
return stack->top == -1;
}
int is_full(Stack *stack) {
return stack->top == STACK_SIZE - 1;
}
void push(Stack *stack, int x) {
if (is_full(stack)) {
printf("Stack overflow.\n");
exit(1);
}
stack->data[++stack->top] = x;
}
int pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack underflow.\n");
exit(1);
}
return stack->data[stack->top--];
}
int main() {
int x, m;
printf("Enter a number and its base: ");
scanf("%d %d", &x, &m);
// Convert x to decimal using stack
Stack stack;
init(&stack);
int y = 0, t = 1;
while (x) {
push(&stack, x % 10);
x /= 10;
}
while (!is_empty(&stack)) {
y += t * pop(&stack);
t *= m;
}
printf("Decimal value: %d\n", y);
// Convert x to base b using stack
int b;
printf("Enter the base to convert to: ");
scanf("%d", &b);
init(&stack);
while (y) {
push(&stack, y % b);
y /= b;
}
printf("Converted value: ");
while (!is_empty(&stack)) {
printf("%d", pop(&stack));
}
printf("\n");
return 0;
}
```
方法二:使用数组
```c
#include <stdio.h>
int main() {
int x, m;
printf("Enter a number and its base: ");
scanf("%d %d", &x, &m);
// Convert x to decimal using array
int a[100], n = 0;
while (x) {
a[n++] = x % 10;
x /= 10;
}
int y = 0, t = 1;
for (int i = n - 1; i >= 0; i--) {
y += a[i] * t;
t *= m;
}
printf("Decimal value: %d\n", y);
// Convert x to base b using array
int b;
printf("Enter the base to convert to: ");
scanf("%d", &b);
n = 0;
while (y) {
a[n++] = y % b;
y /= b;
}
printf("Converted value: ");
for (int i = n - 1; i >= 0; i--) {
printf("%d", a[i]);
}
printf("\n");
return 0;
}
```
阅读全文