用C语言写一个十六进制的累加
时间: 2023-07-04 15:11:55 浏览: 259
下面是一个简单的 C 语言程序,用于将两个十六进制数相加。在此程序中,我们将输入的两个十六进制数存储在字符数组中,计算它们的十进制值,将它们相加,并将结果转换回十六进制表示。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int hex_to_dec(char hex) {
if (hex >= '0' && hex <= '9') {
return hex - '0';
} else if (hex >= 'A' && hex <= 'F') {
return hex - 'A' + 10;
} else if (hex >= 'a' && hex <= 'f') {
return hex - 'a' + 10;
} else {
return -1;
}
}
char dec_to_hex(int dec) {
if (dec >= 0 && dec <= 9) {
return dec + '0';
} else if (dec >= 10 && dec <= 15) {
return dec - 10 + 'A';
} else {
return '?';
}
}
int main() {
char hex1[10], hex2[10], sum[11];
int dec1 = 0, dec2 = 0, carry = 0, temp, i;
printf("Enter first hexadecimal number: ");
scanf("%s", hex1);
printf("Enter second hexadecimal number: ");
scanf("%s", hex2);
int len1 = strlen(hex1);
int len2 = strlen(hex2);
for (i = len1 - 1; i >= 0; i--) {
temp = hex_to_dec(hex1[i]);
if (temp == -1) {
printf("Invalid input: %c\n", hex1[i]);
return 1;
}
dec1 += temp * (1 << (4 * (len1 - i - 1)));
}
for (i = len2 - 1; i >= 0; i--) {
temp = hex_to_dec(hex2[i]);
if (temp == -1) {
printf("Invalid input: %c\n", hex2[i]);
return 1;
}
dec2 += temp * (1 << (4 * (len2 - i - 1)));
}
int dec_sum = dec1 + dec2;
i = 0;
while (dec_sum > 0) {
temp = (dec_sum % 16) + carry;
carry = temp / 16;
sum[i++] = dec_to_hex(temp % 16);
dec_sum /= 16;
}
if (carry > 0) {
sum[i++] = dec_to_hex(carry);
}
sum[i] = '\0';
printf("Sum of %s and %s is %s\n", hex1, hex2, strrev(sum));
return 0;
}
```
在这个程序中,我们定义了两个帮助函数 `hex_to_dec` 和 `dec_to_hex`,用于将十六进制字符转换为十进制数和将十进制数转换为十六进制字符。然后,我们从用户输入中读取两个十六进制数,并将它们转换为十进制数。我们将这两个十进制数相加,并将结果转换回十六进制表示。最后,我们输出相加的结果。