/***************************************************************** * Ovo delo zaštićeno je licencom Creative Commons CC BY-NC-ND 4.0 * (Attribution-NonCommercial-NoDerivatives 4.0 International License). * Za detalje pogledati LICENSE.TXT * Autori: Milena Vujosevic Janicic, Jovana Kovacevic, * Danijela Simic, Andjelka Zecevic, Aleksandra Kocic ******************************************************************/ #include #include int main() { /* Deklaracije potrebnih promenljivih. */ int n, n_abs, rezultat; char jedinica, desetica, stotina, hiljada; int najveca, najmanja, stepen_najvece, stepen_najmanje; /* Ucitavanje vrednosti broja n. */ printf("Unesite cetvorocifreni broj: "); scanf("%d", &n); /* Da bi program radio ispravno i za negativne vrednosti, koristi se apsolutna vrednost broja n. */ n_abs = abs(n); /* Provera ispravnosti ulaznih podataka. */ if (n_abs < 1000 || n_abs > 9999) { printf("Greska: niste uneli cetvorocifreni broj.\n"); return 1; } /* Izdvajanje cifara broja n. */ jedinica = n_abs % 10; desetica = (n_abs / 10) % 10; stotina = (n_abs / 100) % 10; hiljada = n_abs / 1000; /* Po algoritmu za trazenje najvece/najmanje cifre (koji je prikazan u zadatku 2.1.11) pronalaze se najveca i najmanja cifra broja n, kao i pozicije na kojoj se one nalaze. Radi lakseg izracunavanja, pozicija se pamti kao stepen broja 10. Na primer, pozicija cifre jedinica je 1, cifre desetica 10, itd... */ najveca = jedinica; stepen_najvece = 1; if (desetica > najveca) { najveca = desetica; stepen_najvece = 10; } if (stotina > najveca) { najveca = stotina; stepen_najvece = 100; } if (hiljada > najveca) { najveca = hiljada; stepen_najvece = 1000; } /* Racunanje najmanje cifre. */ najmanja = jedinica; stepen_najmanje = 1; if (desetica < najmanja) { najmanja = desetica; stepen_najmanje = 10; } if (stotina < najmanja) { najmanja = stotina; stepen_najmanje = 100; } if (hiljada < najmanja) { najmanja = hiljada; stepen_najmanje = 1000; } /* Ideja: U broju 4179, najmanja cifra je 1 i njen stepen je 100, a najveca cifra je 9 i njen stepen je 1. Zamena mesta se vrsi tako sto se oduzme 9 i doda 1, a zatim oduzme 100 i doda 900. */ rezultat = n_abs - najveca * stepen_najvece + najmanja * stepen_najvece - najmanja * stepen_najmanje + najveca * stepen_najmanje; /* Ako je pocetni broj bio negativan i rezultat treba da bude negativan. */ if(n < 0) rezultat = -rezultat; /* Ispis rezultata. */ printf("Rezultat: %d\n", rezultat); return 0; }