题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b \leq 10^{500}a,b≤10
500
输出格式
输出只有一行,代表a+ba+b的值
输入输出
输入
1
1
输出
2
输入
1001
9099
输出
10100
昨天做了一个题关于高精度的,正好又碰到了,写了一下
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
void add(char a[], char b[])
{
//获取数组长度
int alen = strlen(a), blen = strlen(b), t = 0, i,len;
// 翻转数组,为了低位对齐
reverse(a,a+alen);
reverse(b,b+blen);
// 存放·结果
int c[502]={0};
// 取较短的位
len = (alen < blen) ? alen : blen;
// 对应位相加
for (i = 0; i <len; i++)
{
c[i]=((a[i]+b[i]-'0'-'0')+t);
// t代表进位
t=c[i]/10;
c[i]=c[i]%10;
}
// 剩余位处理
while (i<alen)
{
c[i]=t+(a[i]-'0');
t=c[i]/10;
c[i]=c[i]%10;
i++;
}
while (i<blen)
{
c[i]=t+(b[i]-'0');
t=c[i]/10;
c[i]=c[i]%10;
i++;
}
// 最高位进位
if(t!=0)
{
c[i]=t;i++;
}
// 输出
for(i=i-1; i >= 0; i--)
printf("%d", c[i]);
}
int main()
{
char a[502]={0}, b[502]={0};
scanf("%s %s", a, b);
add(a,b);
return 0;
}
整理了网上的一个版本
#include<stdio.h>
#include<string.h>
using namespace std;
void add(char a[], char b[])
{
int alen = strlen(a), blen = strlen(b), t = 0, i;
int a1[502]={0}, b1[502]={0};
for (i = 0; i < alen; i++)
a1[i] = a[alen-1-i]-'0';
for (i = 0; i < blen; i++)
b1[i] = b[blen-1-i]-'0';
alen = (alen > blen) ? alen : blen;
for (i = 0; i <= alen; i++)
t = a1[i]+b1[i], a1[i] = t%10, a1[i+1] += t/10;
while (!a1[i] && i)
i--;
for(; i >= 0; i--)
printf("%d", a1[i]);
}
int main()
{
char a[502]={0}, b[502]={0};
scanf("%s %s", a, b);
add(a,b);
return 0;
}

本文介绍了如何使用C++实现高精度加法,通过字符数组存储大整数,并展示了两种不同的方法,适用于处理不超过10^500的数值,适合用于编程竞赛或数学问题解决。
428

被折叠的 条评论
为什么被折叠?



