数据
in 文件
350204156568812004512541458715942878921069349854678
5120132301230048014584016540526804565814706519846494321001345794503242112976563432120
out 文件
5120132301230048014584016540526804916018863088658498833542804510446121034045913286798
但我跑出来最后是898,我不理解
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1000001
char a[MAX],b[MAX],c[MAX+1];
int aEnd,bEnd,cha,al_or_bl;//a,b的最大下标 strlen(a)是否大于strlen(b)
int max(int al,int bl)
{
if(al>=bl)return 1;
return -1;
}
void inStr()//输入
{
scanf("%s",a);
scanf("%s",b);
aEnd=strlen(a)-1;
bEnd=strlen(b)-1;
al_or_bl=max(aEnd,bEnd);
}
void create(char A[MAX],char B[MAX])//初始化
{
if(al_or_bl==1)
{
//处理B的'\0'为'0'
int i,j;
for(i=aEnd;i>bEnd;i--)
{
B[i]='0';
}
//B:"1200"->"0012"
for(i=aEnd,j=bEnd;j>=0;i--,j--)//i从后到除了B的部分,j从开始到B末尾
{
char temp=B[i];B[i]=B[j];B[j]=temp;
}
}
if(al_or_bl==-1)
{
//处理A的'\0'为'0'
int i,j;
for(i=bEnd;i>aEnd;i--)
{
A[i]='0';
}
//A:"1200"变成"0012"
for(i=bEnd,j=aEnd;j>=0;i--,j--)//i从后到除了A的部分,j从开始到A末尾
{
char temp=A[i];A[i]=A[j];A[j]=temp;
}
}
}
void add(char A[MAX],char B[MAX],char C[MAX+1])//加
{
const int num=aEnd>bEnd?aEnd:bEnd;//最大位数
int i;
for(i=0;i<=num;i++)//'0'->0
{
A[i]-='0';
B[i]-='0';
}
for(i=0;i<=num;i++)
{
C[i]=A[i]+B[i];
}
for(i=num;i>=1;i--)//处理进位
{
if(C[i]>=9)
{
C[i]%=10;
C[i-1]++;
}
}
}
void print(char C[MAX+1])//打印
{
const int num=aEnd>bEnd?aEnd:bEnd;//最大位数
int i;
for(i=0;i<=num;i++)
{
C[i]+='0';
}
if(C[0]>'9')
{
printf("1");
C[0]=(C[0]-'0')%10+'0';
}
printf("%s",C);
}
int main()
{
inStr();
create(a,b);
add(a,b,c);
print(c);
}