#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[100001],b[100001],c[100001],la,lb,lc,i,x;//x是进位
int main(){
char al[1000001],bl[100001];
gets(al); //输入加数与被加数
gets(bl);
la=strlen(al);
lb=strlen(bl);
for(i=0;i<=la-1;i++) a[la-i]=al[i]-48; //加数放入a数组
for(i=0;i<=lb-1;i++) b[lb-i]=bl[i]-48; //加数放入b数组
lc=1;
x=0;
while(lc<=la||lc<=lb){
c[lc]=a[lc]+b[lc]+x;//第i位相加并加上上次的进位
x=c[lc]/10; //向高位进位
c[lc]%=10; //存储第i位的值
lc++; //位置下标变量
}
c[lc]=x;
if(c[lc]==0){
lc--; //处理最高进位
}
for(i=lc;i>=1;i--){ //输出结果
cout<<c[i];
}
cout<<endl;
return 0;
}
零分代码,为啥错了?
ps:书上的代码,不是为了刷分,而是想知道为什么错了,请大佬们给我讲解下

张岳恒在2020-03-18 12:24:50追加了内容
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[10000001],b[10000001],c[1000001],la,lb,lc,i,x;//x是进位
int main(){
string al,bl;
getline(cin,al); //输入加数与被加数
getline(cin,bl);
la=al.size();
lb=bl.size();
for(i=0;i<=la-1;i++) a[la-i]=al[i]-48; //加数放入a数组
for(i=0;i<=lb-1;i++) b[lb-i]=bl[i]-48; //加数放入b数组
lc=1;
x=0;
while(lc<=la||lc<=lb){
c[lc]=a[lc]+b[lc]+x;//第i位相加并加上上次的进位
x=c[lc]/10; //向高位进位
c[lc]%=10; //存储第i位的值
lc++; //位置下标变量
}
c[lc]=x;
if(c[lc]==0){
lc--; //处理最高进位
}
for(i=lc;i>=1;i--){ //输出结果
cout<<c[i];
}
return 0;
}
用string来做为啥还是错的?我测了几个都对了,为啥提交就错了?
string add(string x,string y)
{
if(x.size()<y.size())
swap(x,y);
int lx=x.size(),ly=y.size(),f=0,a,b,s;
while(lx>0)
{
a=x[lx-1]-'0';
if(ly>0)
b=y[ly-1]-'0';
else b=0;
s=a+b+f;
if(s>=10)
{
x[lx-1]='0'+s%10;
f=1;
}
else
{
x[lx-1]='0'+s;
f=0;
}
lx--;
ly--;
}
if(f==1)
x="1"+x;
return x;
}
望采纳,谢谢!
