利用栈实现十进制转换为任意进制和任意进制转换为十进制代码
时间: 2024-06-13 22:05:17 浏览: 70
实现十进制转换为任意进制的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
void decimalToArbitrary(int decimal, int base) {
int remainder;
int quotient = decimal;
char *result = malloc(sizeof(char) * 100); // 分配足够的空间存储结果
int i = 0;
while (quotient != 0) {
remainder = quotient % base;
quotient = quotient / base;
if (remainder < 10) {
result[i++] = remainder + '0'; // 将余数转换为字符
} else {
result[i++] = remainder - 10 + 'A'; // 将余数转换为大写字母
}
}
printf("转换结果为:");
for (int j = i - 1; j >= 0; j--) {
printf("%c", result[j]); // 倒序输出结果
}
printf("\n");
free(result); // 释放内存
}
int main() {
int decimal, base;
printf("请输入要转换的十进制数:");
scanf("%d", &decimal);
printf("请输入目标进制:");
scanf("%d", &base);
decimalToArbitrary(decimal, base);
return 0;
}
```
实现任意进制转换为十进制的代码如下:
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
int arbitraryToDecimal(char *arbitrary, int base) {
int len = strlen(arbitrary);
int decimal = 0;
int power = 1;
for (int i = len - 1; i >= 0; i--) {
int digit;
if (arbitrary[i] >= '0' && arbitrary[i] <= '9') {
digit = arbitrary[i] - '0'; // 将字符转换为数字
} else if (arbitrary[i] >= 'A' && arbitrary[i] <= 'Z') {
digit = arbitrary[i] - 'A' + 10; // 将大写字母转换为数字
} else {
printf("输入的任意进制数不合法!\n");
return -1;
}
decimal += digit * power;
power *= base;
}
return decimal;
}
int main() {
char arbitrary[100];
int base;
printf("请输入要转换的任意进制数:");
scanf("%s", arbitrary);
printf("请输入该数的进制:");
scanf("%d", &base);
int decimal = arbitraryToDecimal(arbitrary, base);
if (decimal != -1) {
printf("转换结果为:%d\n", decimal);
}
return 0;
}
```
阅读全文