问题标题: 酷町堂:1793 高精度加法

0
0
已解决
张岳恒
张岳恒
资深光能
资深光能

#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来做为啥还是错的?我测了几个都对了,为啥提交就错了?


0
已采纳
江齐悦
江齐悦
高级光能
高级光能
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;
}

 

望采纳,谢谢!

0
0
0
张弘毅
张弘毅
高级守护
高级守护

@江齐悦 :你好腻害呀!还没学的都会!不经让我怀疑你的答案从何而来!

 

0
我要回答