Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct
- {
- int v[101];
- int nr_cifre;
- } nr_mare;
- nr_mare a,b,s;
- void nr_mare_Citire( )
- {
- int i;
- //citim nr de cifre din fiecare numar;
- scanf("%d %d",&a.nr_cifre,&b.nr_cifre);
- //citim cifrele fiecarui numar si le punem in vector in ordine inversa pentru a putea face suma incepand de la suma unitatilor
- //citesc cifrele lui a
- i=a.nr_cifre-1;
- while( i >= 0 )
- {
- scanf("%d",&a.v[i]);
- i--;
- }
- i=b.nr_cifre-1;
- //citesc cifrele lui b
- while( i >= 0 )
- {
- scanf("%d",&b.v[i]);
- i--;
- }
- }
- nr_mare suma( nr_mare a, nr_mare b )
- {
- int transport=0;
- nr_mare c;
- //c.nr_cifre reprezinta nr maxim de cifre pe care l-ar putea avea suma celor doua numere
- if( a.nr_cifre > b.nr_cifre )
- c.nr_cifre = a.nr_cifre;
- else
- c.nr_cifre = b.nr_cifre;
- //completam vectorul de cifre cu 0 acolo unde este nevoie
- //(numarul de cifre al numarului respectiv este mai mic decat numarul maxim de cifre pe care suma il poate avea)
- for(int i=a.nr_cifre; i<c.nr_cifre; i++)
- a.v[i]=0;
- for(int i=b.nr_cifre; i<c.nr_cifre; i++)
- b.v[i]=0;
- for( int i=0; i < c.nr_cifre; i++)
- {
- //incepand de la cifra unitatilor facem suma cifra cu cifra la care adaugam transportul obtinut de la cifrele anterioare
- // transportul initial este 0
- int s=a.v[i] + b.v[i] + transport;
- //in suma finala vom retine doar cifra unitatilor din suma, intrucat suma zecilor reprezinta transportul
- c.v[i]=s % 10;
- transport=s / 10;
- }
- //daca inca mai avem transport trebuie sa-l adaugam la suma finala, deci si numarul de cifre al sumei se modifica
- if( transport > 0 )
- {
- c.nr_cifre++;
- c.v[c.nr_cifre-1]=transport;
- }
- return c;
- }
- int comparare( nr_mare a, nr_mare b )
- {
- //-1 => a<b;
- // 0 => a=b;
- // 1 => a>b;
- //daca a are mai multe cifre este clar ca a e mai mare
- if( a.nr_cifre > b.nr_cifre )
- return 1;
- //la fel in cazul lui b
- if( b.nr_cifre > a.nr_cifre )
- return -1;
- //a si b au acelasi nr de cifre si incepem sa comparam cifra cu cifra
- for( int i = 0; i < a.nr_cifre; i++ )
- if( a.v[i] > b.v[i] )
- return 1;
- else if( a.v[i] < b.v[i] )
- return -1;
- //daca s-a ajuns aici inseamna ca a si b au toate cifrele egale
- return 0;
- }
- void afisare(nr_mare c)
- {
- int i;
- // ultima cifra din c reprezinta de fapt prima cifra a sumei, penultima este a doua cifra, samd
- // deci afisarea sumei se va face in ordine inversa
- for( i=c.nr_cifre-1; i >= 0 ; i-- )
- printf("%d",c.v[i]);
- printf("\n");
- }
- int main()
- {
- nr_mare_Citire( );
- s= suma( a, b );
- afisare( s );
- printf("%d",comparare( a, b ));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement