1 条题解

  • 1
    @ 2026-7-26 16:14:02

    由于这个入(并非)比赛的时候太闲了于是就打算刷题,结果看到了A+B以后打算模仿大炮打蚊子的写法接着写一份。

    这个我要个点赞不过分吧

    我们用到了高精度,本代码由AI润色

    其实是不知道有负数情况的咋办了

    #include<bits/stdc++.h>
    #include<iostream>
    #include<string>
    #include<iomanip>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    #include<queue>
    #include<set>
    #include<map>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<stack>
    #include<list>
    #include<cstdio>
    #include<windows.h>
    using namespace std;
    const long long maxn=114514;
    long long a[maxn],b[maxn],c[maxn];
    string x,y;
    long long teto;
    long long add(string s1,string s2)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        for(long long i=0;i<s1.size();i++)
            a[s1.size()-i-1]=s1[i]-48;
        for(long long j=0;j<s2.size();j++)
            b[s2.size()-j-1]=s2[j]-48;
        long long len=s1.size()>s2.size()?s1.size():s2.size();
        for(long long i=0;i<len;i++)
        {
            c[i]+=a[i]+b[i];
            if(c[i]>=10)
            {
                c[i+1] += c[i]/10;
                c[i]=c[i]%10;
            }
        }
        if(c[len]>0) len++;
        return len;
    }
    long long sub(string s1,string s2)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        for(long long i=0;i<s1.size();i++)
            a[s1.size()-i-1]=s1[i]-48;
        for(long long j=0;j<s2.size();j++)
            b[s2.size()-j-1]=s2[j]-48;
        long long len=s1.size();
        for(long long i=0;i<len;i++)
        {
            c[i]=a[i]-b[i];
            if(c[i]<0)
            {
                c[i]+=10;
                a[i+1]--;
            }
        }
        while(len>1 && c[len-1]==0) len--;
        return len;
    }
    bool cmp(string s1,string s2)
    {
        if(s1.size()!=s2.size())
            return s1.size()>s2.size();
        for(int i=0;i<s1.size();i++)
            if(s1[i]!=s2[i])
                return s1[i]>s2[i];
        return true;
    }
    int main()
    {
    	    cin>>x;
        cin>>y;
        bool flag_x=false, flag_y=false;
        string num_x=x, num_y=y;
        if(x[0] == '-')
        {
            flag_x=true;
            num_x=x.substr(1);
        }
        if(y[0]=='-')
        {
            flag_y=true;
            num_y=y.substr(1);
        }
    
        bool res_neg=false;
        long long teto;
    
        if(flag_x==flag_y)
        {
            teto=add(num_x,num_y);
            res_neg=flag_x;
        }
        else
        {
            if(cmp(num_x,num_y))
            {
                teto=sub(num_x,num_y);
                res_neg=flag_x;
            }
            else
            {
                teto=sub(num_y,num_x);
                res_neg=flag_y;
            }
        }
    
        // 输出符号
        if(res_neg)
            cout<<"-";
        // 严肃倒叙输出。
        for(long long qwq=teto-1;qwq>=0;qwq--)
        {
            cout<<c[qwq];
        }
    	return 0;
    }
    //A+B简直萌了。 
    
    

    TipsTips:复制了在devc++devc++上能运行但是测评姬看不懂过不了qwq。

    • 1

    信息

    ID
    3
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    139
    已通过
    105
    上传者