Giúp tìm lỗi sai trong code in ra tổng 2 số lớn nhất trong 3 số

Mn giúp mik xem sai ở đâu mà mik ko tìm đc

đề là nhập 3 số nguyên dương a,b,c (a,b,c<=5.10^18) in ra tổng 2 số lớn nhất

#include <bits/stdc++.h>

using namespace std;
string tong(string a,string b)
{
     long i,x,y,nho,t;
     string c="";
     nho=0;
     while(a.length()<b.length()) a="0"+a;
     while(b.length()<a.length()) b="0"+b;
     for(i=a.length()-1;i>=0;i--)
     {
          x=a[i]-'0';
          y=b[i]-'0';
          t=x+y+nho;
          nho=t/10;
          c=char(t%10+'0')+c;
     }
     if(nho>0) c="1"+c;
     return c;
}
string hieu(string a,string b)
{
     long x,y,nho,muon,hieu,s;
     string c="";
     muon=0;
     while(a.length()<b.length())a="0"+a;
     while(a.length()<b.length())b="0"+b;
     for(int i=a.length()-1;i>=0;i--)
     {
          x=a[i]-'0';
          y=b[i]-'0';
          s=x-y-muon;
          if(s<0)
          {
               s=s+10;
               muon=1;
          }
          else  muon=0;
          c=char(s+'0')+c;
     }
     while((c.length()>1)&&(c[0]=='0')) c.erase(0,1);
     return c;
}
int main()
{
    freopen("TONG.INP","r",stdin);
    freopen("TONG.OUT","w",stdout);
    string a,b,c;
    cin>>a>>b>>c;
    string x=tong(a,b);
    string m=min(min(a,b),c);
    cout<<hieu(tong(x,c),m);
    return 0;
}

0 < a, b, c <= 5*10^18 thì bạn để kiểu a, b, c là unsigned long long là được mà, đâu cần cài số lớn :face_with_raised_eyebrow:

1 Like

vậy nếu bài nó có giới hạn lớn hơn phải cài số lớn thì sao ạ

Mình sẽ làm 1 kiểu bigint, và tách rời việc hiển thị với biểu diễn nội tại của nó. Tức là không nhất thiết mỗi ô phải là 1 chữ số thập phân, hay thậm chí biểu diễn ở bên trong là hệ nhị phân (khá khó).

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?