用c,++写一个高精度加法程序
时间: 2023-05-31 13:07:04 浏览: 103
用C++实现高精度加法
5星 · 资源好评率100%
以下是一个使用C语言编写的高精度加法程序示例:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 1000 // 高精度数的最大位数
typedef struct {
int len; // 数字长度
int num[MAX_LEN]; // 数字数组
} BigInt;
// 初始化高精度数为0
void initBigInt(BigInt *num) {
num->len = 0;
memset(num->num, 0, sizeof(num->num));
}
// 将字符串转换为高精度数
void fromString(BigInt *num, char *str) {
int len = strlen(str);
initBigInt(num);
for (int i = 0; i < len; i++) {
num->num[i] = str[len - 1 - i] - '0';
}
num->len = len;
}
// 将高精度数转换为字符串
void toString(BigInt *num, char *str) {
int i = 0;
for (i = 0; i < num->len; i++) {
str[i] = num->num[num->len - 1 - i] + '0';
}
str[i] = '\0';
}
// 高精度数加法
void addBigInt(BigInt *a, BigInt *b, BigInt *c) {
initBigInt(c);
int carry = 0;
for (int i = 0; i < a->len || i < b->len; i++) {
int sum = a->num[i] + b->num[i] + carry;
c->num[c->len++] = sum % 10;
carry = sum / 10;
}
if (carry) {
c->num[c->len++] = carry;
}
}
int main() {
char str1[MAX_LEN], str2[MAX_LEN];
BigInt a, b, c;
printf("请输入两个正整数:\n");
scanf("%s%s", str1, str2);
fromString(&a, str1);
fromString(&b, str2);
addBigInt(&a, &b, &c);
char result[MAX_LEN];
toString(&c, result);
printf("两数之和为:%s\n", result);
return 0;
}
```
这个程序的思路是将字符串转换为高精度数进行加法计算,再将结果转换为字符串输出。其中,结构体 `BigInt` 表示高精度数,包含数字的长度和数字数组。函数 `initBigInt` 用于初始化高精度数为0,函数 `fromString` 用于将字符串转换为高精度数,函数 `toString` 用于将高精度数转换为字符串。函数 `addBigInt` 是高精度数加法函数,实现了将两个高精度数相加的功能。在 `main` 函数中,首先输入两个正整数,然后将它们转换为高精度数,调用 `addBigInt` 函数计算它们的和,最后将结果转换为字符串并输出。
阅读全文