资深光能
#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; }
望采纳,谢谢!