8 程序设计综合实践 1.8大数加减C语言
时间: 2023-07-26 21:35:37 浏览: 62
大数加减是指两个超出计算机数据类型范围的大整数进行加减运算。一般情况下,我们需要使用字符串来存储这两个大整数,然后模拟手算加减的过程来得到最终结果。以下是一个简单的C语言实现大数加减的代码示例:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
void reverse(char *s) {
int len = strlen(s);
for (int i = 0; i < len / 2; i++) {
char tmp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = tmp;
}
}
void add(char *a, char *b, char *result) {
int carry = 0;
int len_a = strlen(a);
int len_b = strlen(b);
int len = len_a > len_b ? len_a : len_b;
for (int i = 0; i < len; i++) {
int da = i < len_a ? a[i] - '0' : 0;
int db = i < len_b ? b[i] - '0' : 0;
int sum = da + db + carry;
result[i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry > 0) {
result[len] = carry + '0';
result[len + 1] = '\0';
} else {
result[len] = '\0';
}
reverse(result);
}
int compare(char *a, char *b) {
int len_a = strlen(a);
int len_b = strlen(b);
if (len_a > len_b) {
return 1;
} else if (len_a < len_b) {
return -1;
} else {
return strcmp(a, b);
}
}
void sub(char *a, char *b, char *result) {
int borrow = 0;
int len_a = strlen(a);
int len_b = strlen(b);
if (compare(a, b) < 0) {
char *tmp = a;
a = b;
b = tmp;
len_a = strlen(a);
len_b = strlen(b);
result[0] = '-';
}
int i, j;
for (i = len_a - 1, j = len_b - 1; i >= 0 && j >= 0; i--, j--) {
int da = a[i] - '0';
int db = b[j] - '0';
int diff = da - db - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[i] = diff + '0';
}
for (; i >= 0; i--) {
int da = a[i] - '0';
int diff = da - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[i] = diff + '0';
}
int len = strlen(result);
int pos = 0;
while (pos < len && result[pos] == '0') {
pos++;
}
if (pos == len) {
result[0] = '0';
result[1] = '\0';
} else {
if (result[0] == '-') {
pos--;
len--;
}
for (int i = pos; i < len; i++) {
result[i - pos] = result[i];
}
result[len - pos] = '\0';
}
}
int main() {
char a[MAX_LEN], b[MAX_LEN], result[MAX_LEN];
printf("请输入两个大整数:\n");
scanf("%s%s", a, b);
add(a, b, result);
printf("加法结果:%s\n", result);
sub(a, b, result);
printf("减法结果:%s\n", result);
return 0;
}
```
该程序中使用 `reverse` 函数将字符串翻转,方便从低位到高位进行计算;使用 `add` 函数实现大数加法,使用 `sub` 函数实现大数减法;使用 `compare` 函数比较两个大整数的大小,以确定减法的顺序。在输入时,需要保证输入的字符串没有前导零。