1.1核心算法
c[i] += a[i] + b[i];
c[i+1] = c[i] / 10;c[i] = c[i] % 10;
1.2具体说明
以洛谷P1601 A+B 为例
题目描述
高精度加法,计算 a+b ,不用考虑负数。
输入格式
分两行输入。a,b ≤ 10的500次方。
输出格式
输出只有一行,代表 a+b 的值。
1.3具体代码
//高精度加法
#include <iostream>
#include <cstring>
#include <cstdlib>
char arr1[505] = { 0 }, arr2[505] = { 0 };
int a[505], b[505], c[505];
int max(int a, int b) {
return a > b ? a : b;
}
int main()
{
gets(arr1);
gets(arr2);
int la = strlen(arr1);
int lb = strlen(arr2);
//从低位到高位,倒置
for (int i = 0; i < la; i++) {
a[la - i] = arr1[i]-'0';
}
for (int i = 0; i < lb; i++) {
b[lb - i] = arr2[i]-'0';
}
//计算
int lc = max(la, lb) + 1;
// 或int lc = max(la,lb);
for (int i = 1; i <= lc; i++) {
c[i] += a[i] + b[i];
c[i + 1] = c[i] / 10;
c[i] = c[i] % 10;
}
//判断是否进位
if (c[lc] == 0 && lc > 0) lc--;
// 或if (c[lc+1] > 0) lc++;
//输出
for (int i = lc; i > 0; i--) {
printf("%d", c[i]);
}
return 0;
}