题目描述 输入两个四进制整数a和b,以四进制输出它们的加和。题目保证a和b的位数小于等于19位。 本题需要考虑符号位。 输入 两个四进制整数,以回车作为间隔 输出 一个四进制整数 输入样例 1 1 输出样例 2 输入样例2 -1 -1 输出样例2 -2 用C语言完成
时间: 2025-02-16 22:15:46 浏览: 124
题目要求你编写一个C语言程序,用于计算给定的两个四进制数a和b的和。由于涉及到负数,所以你需要处理符号位。以下是解决这个问题的一种方法:
```c
#include <stdio.h>
#include <string.h>
// 转换字符串到十进制函数
int str_to_decimal(char* str) {
int num = 0;
int sign = 1; // 正数初始化
if (*str == '-') { // 检查是否有负号
sign = -1;
str++;
}
for (int i = 0; str[i] != '\0'; i++) {
num = num * 4 + (str[i] - '0');
}
return sign * num;
}
// 四进制转十进制,再返回四进制表示
char* add_in_base4(int a, int b) {
int sum = str_to_decimal(a) + str_to_decimal(b);
char result[50]; // 为了容纳最多19位四进制数
sprintf(result, "%o", sum); // 将十进制转换为八进制,因为八进制可以轻松转化为四进制
// 移除前缀"0b"或"0o"
if (strcmp(result, "0b") == 0 || strcmp(result, "0o") == 0) {
result += 2;
}
return result;
}
int main() {
char input1[20], input2[20];
fgets(input1, sizeof(input1), stdin);
fgets(input2, sizeof(input2), stdin);
// 移除行尾的换行符
input1[strlen(input1)-1] = '\0';
input2[strlen(input2)-1] = '\0';
char* sum_str = add_in_base4(input1, input2);
printf("%s\n", sum_str);
return 0;
}
```
阅读全文
相关推荐


















