template/学习路径/算法/高精度加法.cpp
2025-03-17 00:29:43 +08:00

37 lines
812 B
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a1[500],b1[500],c[500];
int main()
{
memset(a1,0,sizeof a1);
memset(b1,0,sizeof b1);
memset(c,0,sizeof c);
int lena,lenb,lenc,i;
char a[500],b[500];
cin>>a>>b; //以字符串输入ab不用输入可以直接用int
lena=strlen(a);
lenb=strlen(b);
for(i=0;i<=lena-1;i++)a1[lena-i]=a[i]-48; //倒序写入a方便后面运算;
for(i=0;i<=lena-1;i++)b1[lenb-i]=b[i]-48; //倒序写入b;
//竖式加法
int x=0; //处理进位;
lenc=lena>lenb? lena:lenb; //用两个中最长的数决定运算次数;
for(i=1;i<=lenc;i++)
{
c[i]=a1[i]+b1[i]; //竖式加法;
x=c[i]/10;
c[i]%=10; //处理进位;
}
c[i+1]=x; //补上最高位;
lenc=lenc+1;
while(c[lenc]==0&&lenc>1)lenc--; //删除前导0;
for(i=lenc;i>=1;i--)
cout<<c[i];
}