用c++写一个高精度加法程序
时间: 2023-05-31 13:07:06 浏览: 111
以下是一个高精度加法程序的示例代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_DIGITS 1000
typedef struct {
int digits[MAX_DIGITS];
int size;
} BigInt;
void init(BigInt *num) {
memset(num->digits, 0, sizeof(num->digits));
num->size = 0;
}
void assign(BigInt *num, char *str) {
init(num);
int len = strlen(str);
for (int i = 0; i < len; i++) {
num->digits[i] = str[len - i - 1] - '0';
}
num->size = len;
}
void print(BigInt *num) {
for (int i = num->size - 1; i >= 0; i--) {
printf("%d", num->digits[i]);
}
printf("\n");
}
void add(BigInt *num1, BigInt *num2, BigInt *result) {
init(result);
int carry = 0;
for (int i = 0; i < num1->size || i < num2->size; i++) {
int sum = num1->digits[i] + num2->digits[i] + carry;
result->digits[i] = sum % 10;
carry = sum / 10;
result->size++;
}
if (carry > 0) {
result->digits[result->size] = carry;
result->size++;
}
}
int main() {
BigInt num1, num2, result;
char str1[MAX_DIGITS], str2[MAX_DIGITS];
printf("Enter first number: ");
fgets(str1, MAX_DIGITS, stdin);
printf("Enter second number: ");
fgets(str2, MAX_DIGITS, stdin);
assign(&num1, str1);
assign(&num2, str2);
add(&num1, &num2, &result);
printf("Sum = ");
print(&result);
return 0;
}
```
在此示例中,我们使用结构体来表示大整数。在结构体中,我们使用一个整数数组来存储每个数字,并使用另一个整数来存储数字的数量。在初始化函数中,我们使用 memset() 函数将数组中的所有元素都初始化为0。在分配函数中,我们将输入的字符串转换为一个大整数,并将其存储在结构体中。在打印函数中,我们按相反的顺序循环遍历数组,并将每个数字打印出来。在加函数中,我们将两个大整数相加,并将结果存储在另一个大整数中。我们使用一个变量来跟踪进位,并在处理完所有数字后将其添加到结果中。最后,在主函数中,我们使用 fgets() 函数从标准输入中读取两个字符串,并将它们分配给两个大整数。我们将这两个大整数相加,并将结果打印出来。
阅读全文