设计实现一个处理100位以内的长整数加减运算的程序。
时间: 2024-06-03 20:07:10 浏览: 8
以下是一个简单的实现:
1. 首先,我们需要将长整数存储在数组中,每个数字占据一个数组元素。
2. 对于加法,我们从右到左遍历两个长整数数组,将对应位上的数字相加,并将结果存储在一个新的数组中。如果相加的结果大于等于10,则需要将进位加到下一位的运算中。最后,我们需要将结果数组反转,以得到正确的长整数。
3. 对于减法,我们也从右到左遍历两个长整数数组,将对应位上的数字相减,并将结果存储在一个新的数组中。如果相减的结果小于0,则需要从上一位借位。最后,我们需要将结果数组反转,以得到正确的长整数。
以下是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char *str, int len) { // 反转字符串
int i, j;
for (i = 0, j = len - 1; i < j; i++, j--) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
void add(char *a, char *b, char *result) { // 长整数加法
int len_a = strlen(a);
int len_b = strlen(b);
int len_result = (len_a > len_b ? len_a : len_b) + 1;
int carry = 0;
int i, j, k;
reverse(a, len_a);
reverse(b, len_b);
for (i = 0, j = 0, k = 0; k < len_result - 1; i++, j++, k++) {
int digit_a = (i < len_a ? a[i] - '0' : 0);
int digit_b = (j < len_b ? b[j] - '0' : 0);
int sum = digit_a + digit_b + carry;
carry = sum / 10;
result[k] = sum % 10 + '0';
}
if (carry > 0) {
result[k++] = carry + '0';
}
result[k] = '\0';
reverse(result, k);
}
void subtract(char *a, char *b, char *result) { // 长整数减法
int len_a = strlen(a);
int len_b = strlen(b);
int len_result = (len_a > len_b ? len_a : len_b);
int borrow = 0;
int i, j, k;
reverse(a, len_a);
reverse(b, len_b);
for (i = 0, j = 0, k = 0; k < len_result; i++, j++, k++) {
int digit_a = (i < len_a ? a[i] - '0' : 0);
int digit_b = (j < len_b ? b[j] - '0' : 0);
int diff = digit_a - digit_b - borrow;
borrow = 0;
if (diff < 0) {
borrow = 1;
diff += 10;
}
result[k] = diff + '0';
}
while (len_result > 1 && result[len_result - 1] == '0') { // 去除前导零
len_result--;
}
result[len_result] = '\0';
reverse(result, len_result);
}
int main() {
char a[101], b[101], op;
char result[102];
printf("请输入一个100位以内的长整数和运算符:\n");
scanf("%s %c %s", a, &op, b);
switch (op) {
case '+':
add(a, b, result);
printf("结果为:%s\n", result);
break;
case '-':
subtract(a, b, result);
printf("结果为:%s\n", result);
break;
default:
printf("无效的运算符!\n");
break;
}
return 0;
}
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)