用C语言数组方法和栈两种方法写一个各种进制相互转换的系统
时间: 2024-03-25 11:40:18 浏览: 13
好的,以下是使用C语言数组方法和栈两种方法分别实现的各种进制相互转换系统的代码:
## 使用C语言数组方法
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
void convert(int num, int base, char *result) {
int i = 0;
while (num != 0) {
int rem = num % base;
if (rem < 10) {
result[i++] = rem + '0';
} else {
result[i++] = rem - 10 + 'A';
}
num /= base;
}
result[i] = '\0';
strrev(result);
}
int to_decimal(char *num, int base) {
int len = strlen(num);
int power = 1;
int result = 0;
for (int i = len - 1; i >= 0; i--) {
int digit;
if (num[i] >= '0' && num[i] <= '9') {
digit = num[i] - '0';
} else {
digit = num[i] - 'A' + 10;
}
result += digit * power;
power *= base;
}
return result;
}
void convert_base(char *num, int from_base, int to_base, char *result) {
int decimal = to_decimal(num, from_base);
convert(decimal, to_base, result);
}
int main() {
char num[32], result[32];
int from_base, to_base;
printf("请输入一个数字:");
scanf("%s", num);
printf("请输入该数字的进制:");
scanf("%d", &from_base);
printf("请输入要转换成的进制:");
scanf("%d", &to_base);
convert_base(num, from_base, to_base, result);
printf("转换后的数字为:%s\n", result);
return 0;
}
```
## 使用栈方法
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
struct Stack {
int top;
char items[32];
};
void push(struct Stack *s, char c) {
s->items[++s->top] = c;
}
char pop(struct Stack *s) {
if (s->top == -1) {
return '\0';
}
return s->items[s->top--];
}
void convert(int num, int base, char *result) {
struct Stack s;
s.top = -1;
while (num != 0) {
int rem = num % base;
if (rem < 10) {
push(&s, rem + '0');
} else {
push(&s, rem - 10 + 'A');
}
num /= base;
}
int i = 0;
while (s.top != -1) {
result[i++] = pop(&s);
}
result[i] = '\0';
}
int to_decimal(char *num, int base) {
int len = strlen(num);
int power = 1;
int result = 0;
for (int i = len - 1; i >= 0; i--) {
int digit;
if (num[i] >= '0' && num[i] <= '9') {
digit = num[i] - '0';
} else {
digit = num[i] - 'A' + 10;
}
result += digit * power;
power *= base;
}
return result;
}
void convert_base(char *num, int from_base, int to_base, char *result) {
int decimal = to_decimal(num, from_base);
convert(decimal, to_base, result);
}
int main() {
char num[32], result[32];
int from_base, to_base;
printf("请输入一个数字:");
scanf("%s", num);
printf("请输入该数字的进制:");
scanf("%d", &from_base);
printf("请输入要转换成的进制:");
scanf("%d", &to_base);
convert_base(num, from_base, to_base, result);
printf("转换后的数字为:%s\n", result);
return 0;
}
```
这两个程序的实现方法略有不同,但都可以实现各种进制之间的相互转换。可以根据需要选择使用哪一种方法。