用c语言编写一个16进制计算器
时间: 2023-09-01 19:10:36 浏览: 49
好的,以下是一个简单的16进制计算器的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 100
int hex_to_dec(char c) {
if (isdigit(c)) {
return c - '0';
} else if (c >= 'a' && c <= 'f') {
return c - 'a' + 10;
} else if (c >= 'A' && c <= 'F') {
return c - 'A' + 10;
} else {
return -1; // error
}
}
char dec_to_hex(int n) {
if (n >= 0 && n <= 9) {
return n + '0';
} else if (n >= 10 && n <= 15) {
return n - 10 + 'a';
} else {
return '?'; // error
}
}
char* add_hex(char* a, char* b) {
int len_a = strlen(a), len_b = strlen(b), len_c = 0;
char* c = (char*) malloc(sizeof(char) * (MAX_LEN + 1));
int carry = 0;
while (len_a > 0 || len_b > 0 || carry > 0) {
int x = (len_a > 0) ? hex_to_dec(a[--len_a]) : 0;
int y = (len_b > 0) ? hex_to_dec(b[--len_b]) : 0;
int z = x + y + carry;
carry = z / 16;
c[len_c++] = dec_to_hex(z % 16);
}
c[len_c] = '\0';
// reverse the result
for (int i = 0, j = len_c - 1; i < j; i++, j--) {
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
return c;
}
int main() {
char a[MAX_LEN + 1], b[MAX_LEN + 1];
printf("Enter two hexadecimal numbers:\n");
scanf("%s %s", a, b);
char* c = add_hex(a, b);
printf("The sum is: %s\n", c);
free(c);
return 0;
}
```
这个程序实现了两个16进制数相加,并输出结果。在此程序中,我们用 `hex_to_dec` 函数将16进制数转换为10进制数,用 `dec_to_hex` 函数将10进制数转换为16进制数。`add_hex` 函数实现了16进制数的加法。输入的两个16进制数必须以字符串形式输入,并且长度不能超过 `MAX_LEN`。
阅读全文