Advertisement
MattDovi

Scaderea a 2 nr mari

Mar 20th, 2021
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("scad.in");
  7. ofstream fout("scad.out");
  8.  
  9. int na, nb;
  10. char a[1005], b[1005];
  11.  
  12. void compare(){
  13.     /// daca a < b inversez vectorul a cu vectorul b
  14.     if(nb > na){
  15.         for(int i = 0; i < nb; i++)
  16.             swap(a[i], b[i]);
  17.  
  18.         // pot folosi si swap(na, nb)
  19.         int c = nb;
  20.         nb = na;
  21.         na = c;
  22.         return;
  23.     }
  24.  
  25.     if(nb == na){
  26.         int ok = true;  /// it is true that na > nb
  27.         for(int i = 0; i < nb; i++){
  28.             if(b[i] > a[i]){
  29.                 ok = false;
  30.                 break;
  31.             }
  32.         }
  33.         if(ok == false){
  34.             for(int i = 0; i < nb; i++)
  35.                 swap(a[i], b[i]);
  36.             // pot folosi si swap(na, nb)
  37.             int c = nb;
  38.             nb = na;
  39.             na = nb;
  40.         }
  41.     }
  42. }
  43.  
  44.  
  45. void scad(){
  46.     int t = 0;
  47.     for(int i = 0; i < na; i++){
  48.         if(a[i] >= b[i])
  49.             a[i] = ((a[i] - '0') - (b[i] - '0')) + '0';
  50.         else{
  51.             int j = i + 1;
  52.             while(a[j] == '0')
  53.                 a[j++] = '9';
  54.             a[j]--;
  55.             a[i] = (10 + (a[i] - '0') - (b[i] - '0')) + '0';
  56.         }
  57.     }
  58.     /// verific daca mai am 0-uri nesemnificative dupa scadere
  59.     for (; na > 0 && a[na - 1] == '0'; na--); // sa n-am zerouri nesemnificative
  60.  
  61. }
  62.  
  63. int main()
  64. {
  65.     fin.getline(a, 1001);
  66.     fin.getline(b, 1001);
  67.  
  68.     na = strlen(a);
  69.     nb = strlen(b);
  70.  
  71.     compare();    /// daca a < b inversez cifrele din a cu cifrele din b
  72.  
  73.     /// retin numarul pe invers
  74.     for(int i = 0; i < na / 2; i++){
  75.         swap(a[i], a[na - i - 1]);
  76.         swap(b[i], b[nb - i - 1]);
  77.     }
  78.  
  79.     /// egalez nr de cifre
  80.     if(na < nb){
  81.         for(int i = na; i < nb; i++)   a[i] = '0';
  82.         na = nb;
  83.     }
  84.     else if (nb < na){
  85.         for(int i = nb; i < na; i++)   b[i] = '0';
  86.         nb = na;
  87.     }
  88.  
  89.     /// fac functia de scadere, stiind ca a >= b, lucru verificat in comparare()
  90.     scad();
  91.  
  92.     for(int i = na - 1; i >= 0; i--)
  93.         fout << a[i];
  94.     fout << '\n';
  95.     return 0;
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement