Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #define MAX (1001)
- /*
- Zadatak je sa kursa "Uvod u algoritme" sa sajta petlja.org
- lekcija: Uvod
- zadatak: sabiranje 4
- max vreme: 1s
- max memorija: 1000mb
- ulaz: stdin
- izlaz: stdout
- 1) U prvom redu standardnog ulaza se nalazi broj A. U drugom redu se nalazi broj B.
- 2) U prvom redu standardnog izlaza ispisati zbir brojeva A i B.
- 3) Ograničenja: -10^1000 <= A, B <= 10^1000
- */
- void sum(char *A, char *B, int nA, int nB, int prenos);
- int main(){
- char A[MAX], B[MAX];
- scanf("%s", A);
- scanf("%s", B);
- int nA = strlen(A) - 1;
- int nB = strlen(B) - 1;
- sum(A, B, nA, nB, 0);
- printf("\n");
- return 0;
- }
- void sum(char *A, char *B, int nA, int nB, int prenos){
- /*
- Funkcija prima vrlo dugačke brojeve predstavljene kao stringove i njihove brojeve cifara.
- Ideja algoritma je računanje zbirova cifara od poslednjih ka prvim u oba stringa, a usput i
- beleženje da li postoji prenos +1 na sledeću cifru.
- */
- int tmpBroj;
- if(nA < 0 && nB < 0){ // uslov izlaska iz rekurzije - ukoliko su oba brojača < 0,
- if(prenos == 1){ // i ukoliko ne postoji prenos za dodatnu cifru
- tmpBroj = 1; // u suprotnom će se samo ispisati jedinica (valjda)
- prenos = 0;
- }
- else
- return;
- }
- int cA;
- int cB;
- int tmpPrenos;
- if(nA >= 0 && nB >= 0) { // oba brojača su validna - sabiraju se cifre od oba broja
- cA = A[nA] - '0';
- cB = B[nB] - '0';
- tmpBroj = cA + cB + prenos;
- if(tmpBroj > 9){
- tmpPrenos = 1;
- tmpBroj = tmpBroj%10;
- }
- else
- tmpPrenos = 0;
- nA--;
- nB--;
- sum(A, B, nA, nB, tmpPrenos);
- }
- else if(nA < 0) { // brojač za A nije validan, uzima se samo cifra od B
- // i nastavlja se brojanje do kraja B
- tmpBroj = B[nB] - '0' + prenos;
- if(tmpBroj > 9){
- tmpPrenos = 1;
- tmpBroj = tmpBroj%10;
- }
- else
- tmpPrenos = 0;
- nB--;
- sum(A, B, nA, nB, tmpPrenos);
- }
- else if(nB < 0){ // brojač za B nije validan, uzima se samo cifra od A
- // i nastavlja se brojanje do kraja A
- tmpBroj = A[nA] - '0' + prenos;
- if(tmpBroj > 9){
- tmpPrenos = 1;
- tmpBroj = tmpBroj%10;
- }
- else
- tmpPrenos = 0;
- nA--;
- sum(A, B, nA, nB, tmpPrenos);
- }
- printf("%d", tmpBroj);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement