wiki oi 3116 高精度练习之加法

时间:2024-01-03 11:19:44
题目描述 Description

给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A+B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

15

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

分析:和减法一样,去掉了两个数的大小比较,发现没必要,还有发现不用判断cc大于10么, 直接cc%=10;

代码:

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[],b[];
int c[];
int main()
{
cin>>a>>b;
memset(c,,sizeof(c));
int alen=strlen(a);
int blen=strlen(b);
int i=alen-,j=blen-,k=;
int carry=;
while(i>=&&j>=)
{
int cc=(a[i--]-'')+(b[j--]-'')+carry;
carry=cc/;
cc%=;
c[k++]=cc;
}
while(i>=)
{
int cc=(a[i--]-'')+carry;
carry=cc/;
cc%=;
c[k++]=cc;
}
while(j>=)
{
int cc=(b[j--]-'')+carry;
carry=cc/;
cc%=;
c[k++]=cc;
}
if(carry!=)c[k++]=carry;//最后判断进位是不是为0不是要进一位 避免23+99=22;
int last=k;
for(int l=k; l>=; l--)//找开头不是0的那个起点
if(c[l]!=)
{
last=l;
break;
}
for(int l=last; l>=; l--)printf("%d",c[l]);
printf("\n");
return ;
}