Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <cstring>
- using namespace std;
- ifstream fin("scad.in");
- ofstream fout("scad.out");
- int na, nb;
- char a[1005], b[1005];
- void compare(){
- /// daca a < b inversez vectorul a cu vectorul b
- if(nb > na){
- for(int i = 0; i < nb; i++)
- swap(a[i], b[i]);
- // pot folosi si swap(na, nb)
- int c = nb;
- nb = na;
- na = c;
- return;
- }
- if(nb == na){
- int ok = true; /// it is true that na > nb
- for(int i = 0; i < nb; i++){
- if(b[i] > a[i]){
- ok = false;
- break;
- }
- }
- if(ok == false){
- for(int i = 0; i < nb; i++)
- swap(a[i], b[i]);
- // pot folosi si swap(na, nb)
- int c = nb;
- nb = na;
- na = nb;
- }
- }
- }
- void scad(){
- int t = 0;
- for(int i = 0; i < na; i++){
- if(a[i] >= b[i])
- a[i] = ((a[i] - '0') - (b[i] - '0')) + '0';
- else{
- int j = i + 1;
- while(a[j] == '0')
- a[j++] = '9';
- a[j]--;
- a[i] = (10 + (a[i] - '0') - (b[i] - '0')) + '0';
- }
- }
- /// verific daca mai am 0-uri nesemnificative dupa scadere
- for (; na > 0 && a[na - 1] == '0'; na--); // sa n-am zerouri nesemnificative
- }
- int main()
- {
- fin.getline(a, 1001);
- fin.getline(b, 1001);
- na = strlen(a);
- nb = strlen(b);
- compare(); /// daca a < b inversez cifrele din a cu cifrele din b
- /// retin numarul pe invers
- for(int i = 0; i < na / 2; i++){
- swap(a[i], a[na - i - 1]);
- swap(b[i], b[nb - i - 1]);
- }
- /// egalez nr de cifre
- if(na < nb){
- for(int i = na; i < nb; i++) a[i] = '0';
- na = nb;
- }
- else if (nb < na){
- for(int i = nb; i < na; i++) b[i] = '0';
- nb = na;
- }
- /// fac functia de scadere, stiind ca a >= b, lucru verificat in comparare()
- scad();
- for(int i = na - 1; i >= 0; i--)
- fout << a[i];
- fout << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement