40分!高精度加法!大佬求助!

P1001 A+B Problem

yinjunjie2012 @ 2024-08-23 09:35:02

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a[100010],b[100010];
    cin>>a>>b;
    int a1[100010],b1[100010],la=strlen(a),lb=strlen(b);
    for(int i=0;i<la;i++)a1[i]=a[la-i-1]-48;
    for(int i=0;i<lb;i++)b1[i]=b[lb-i-1]-48;
    int c1[100010],lc=max(la,lb)+1;
    int x=0;
    for(int i=0;i<lc;i++){
        c1[i]=a1[i]+b1[i]+x;
        x=c1[i]/10;
        c1[i]%=10;
    }
    int flag=0;
    for(int i=lc;i>=0;i--){
        if(flag==0 and c1[i]==0){
            continue;
        }
        if(flag==0 and c1[i]!=0){
            cout<<c1[i];
            flag=1;
        }
        else{
            cout<<c1[i];
        }
    }
    return 0;
}

by yinjunjie2012 @ 2024-08-23 09:37:21

样例过了


by dream_dad @ 2024-08-23 09:37:36


#include<bits/stdc++.h>
using namespace std;
int a[20005],b[20005],c[400000010];
string gjd(string s,string s1)
{
    int len=s.size(),len1=s1.size(),len2=len+len1;
    string ans="";
    for(int i=1;i<=len;i++)a[i]=s[len-i]-'0';
    for(int i=1;i<=len1;i++)b[i]=s1[len1-i]-'0';
    for(int i=1;i<=len;i++)
        for(int j=1;j<=len1;j++)
        {
            c[i+j-1]+=a[i]*b[j];
            if(c[i+j-1]>=10)
            {
                c[i+j]+=c[i+j-1]/10;
                c[i+j-1]=c[i+j-1]%10;
            }
        }
    while(c[len2]==0&&len2>0)len2--;
    for(int i=len2;i>=1;i--)ans+=c[i]+'0';
    return ans;
}
int main()
{
    string s,s1;
    cin>>s>>s1;
    cout<<gjd(s,s1);
    return 0;
}

by yinjunjie2012 @ 2024-08-23 09:38:32

@dream_dad 感谢大佬


by yinjunjie2012 @ 2024-08-23 09:40:48

@dream_dad 不对呀,我试了一下10和90是900啊?


by dream_dad @ 2024-08-23 09:41:55

给错了


by shiyilang0910 @ 2024-08-23 09:42:03

@yinjunjie2012 如果输入0 0,将无输出,应该是flag后面出现了bug


by dream_dad @ 2024-08-23 09:42:32


#include<bits/stdc++.h>
using namespace std;
int a[1000],b[1000],c[1000];
string hjd(string s,string s1)
{
    string ans="";
    int len=s.size(),len1=s1.size(),len2;
    for(int i=1;i<=len;i++)a[i]=s[len-i]-'0';
    for(int i=1;i<=len1;i++)b[i]=s1[len1-i]-'0';
    len2=max(len,len1);
    for(int i=1;i<=len2;i++)
    {
        c[i]+=a[i]+b[i];
        if(c[i]>=10)
        {
            c[i+1]=1;
            c[i]-=10;
        }
    }
    if(c[len2+1]>0)len2++;
    for(int i=len2;i>=1;i--)ans+=c[i]+'0';
    return ans;
}
int main()
{
    string s,s1;
    cin>>s>>s1;
    cout<<hjd(s,s1);
    return 0;
}

by yinjunjie2012 @ 2024-08-23 09:44:31

谢谢各位大佬


by lxu111 @ 2024-08-27 14:19:27

不用这么复杂吧。。。

long long a,b;
cin>>a>>b;
cout<<a+b;

这样不就好了吗?


by zhangkaishuo666 @ 2024-08-27 18:58:02

其实这个数据量特别小你直接用a+b就行了别问我怎么知到的,问就是试出来的嘿嘿QAQ。


| 下一页