键盘输入两个任意长度十进制数(20位以内)的求和,用“-”来标识负数,正数可以不加符号或加“+”号
时间: 2023-09-18 09:06:40 浏览: 141
好的,下面是使用 C 语言实现的代码,用于键盘输入两个任意长度十进制数(20位以内)的求和。同时支持正数和负数,正数可以不加符号或加“+”号,负数用“-”来标识。
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 21 // 最大输入长度为20,加上一个回车符
int main() {
char num1[MAX_LEN], num2[MAX_LEN], result[MAX_LEN + 1];
int len1, len2, maxlen, i, carry = 0, sum, sign = 1;
// sign为结果的符号,1表示正数,-1表示负数
// 初始值为1,如果两个数中有负数,则改为-1
// 输入第一个数
printf("请输入第一个数:");
fgets(num1, MAX_LEN, stdin);
len1 = strlen(num1) - 1; // 减去回车符的长度
// 输入第二个数
printf("请输入第二个数:");
fgets(num2, MAX_LEN, stdin);
len2 = strlen(num2) - 1; // 减去回车符的长度
// 比较两个数的长度,取最大值
if (len1 > len2) {
maxlen = len1;
} else {
maxlen = len2;
}
// 初始化结果数组
for (i = 0; i <= maxlen; i++) {
result[i] = '0';
}
result[maxlen + 1] = '\0'; // 加上字符串结束符
// 逐位相加
for (i = 1; i <= maxlen; i++) {
sum = carry;
if (i <= len1) {
sum += num1[len1 - i] - '0'; // 将字符转换为数字
}
if (i <= len2) {
sum += num2[len2 - i] - '0';
}
if (sum >= 10) {
carry = 1;
sum -= 10;
} else {
carry = 0;
}
result[maxlen - i] = sum + '0'; // 将数字转换为字符
}
// 判断结果的符号
if (num1[0] == '-' || num2[0] == '-') {
sign = -1;
}
if (num1[0] == '-' && num2[0] == '-') {
sign = -sign; // 两个数都是负数,结果为正数
}
// 输出结果
if (sign == -1) {
printf("-%s\n", result);
} else {
printf("%s\n", result);
}
return 0;
}
```
需要注意的是,这个代码只能处理两个长度不超过20位的十进制数的加法,如果超过了20位,则可能会出现错误结果。同时,这个代码也只能处理非负整数和负整数的加法,不能处理小数和其他类型的数据。
阅读全文