Medeea este elevă în clasa a V-a. Profesorul ei de matematică, domnul X, le-a arătat la oră cum se transformă o fracție din fracție zecimală în fracție ordinară. Totuși, Medeea vorbind cu colega ei în timpul predării, când a ajuns acasă a realizat că nu știe cum să transforme fracția din temă. Medeea vă roagă să o ajutați să rezolve tema transformând fracția zecimală primită în fracție ordinară şi să o aduceți la forma ireductibilă.
Cerința
Medeea vă roagă să o ajutați să rezolve tema transformând fracția zecimală primită în fracție ordinară şi să o aduceți la forma ireductibilă.
Date de intrare
Fişierul de intrare dec2ord.in
conține pe prima linie partea întreaga a numărului, pe a doua linie se află partea zecimală neperiodică, iar pe a treia partea periodică.
Date de ieșire
Fişierul de ieşire dec2ord.out
conține pe o singură linie o fracție ordinară ireductibilă de forma numărător/numitor.
Restricții și precizări
- Fiecare parte are maximum
5
cifre - Se garantează că fracția dată are cel puțin o zecimală
- Dacă fracția nu are parte periodică sau zecimală neperiodică, pe linia aferentă se va afla
-1
. - Pentru
70%
din teste fracțiile nu au perioadă
Exemplu
dec2ord.out
125 9 6
dec2ord.out
3779/30
Explicație
125,9(6) = 3779/30
.
#include <bits/stdc++.h> using namespace std; ifstream cin("dec2ord.in"); ofstream cout("dec2ord.out"); int main() { int n , z , per; cin >> n >> z >> per; if(z==-1 && per==-1) cout << n; else if(per==-1 && z!=-1) { int p = 1 , cz = z; while(cz) { p*=10; cz/=10; } int a=n*p+z; int b=p; while(b) { int r=a%b; a=b; b=r; } cout << (n*p+z)/a << '/' << p/a; } else if(z==-1 && per!=-1) { int cper=per; int p=1; while(cper) { cper/=10; p*=10; } int a=n*p+per-n; int b=p-1; while(b) { int r=a%b; a=b; b=r; } cout << (n*p+per-n)/a << '/' << (p-1)/a; } else if(z!=-1 && per!=-1) { long long int p = 1 , p1 = 1 , cz = z , cper = per; while(cz) { p*=10; cz/=10; } while(cper) { p1*=10; cper/=10; } long long int q=n*p+z; long long int a=q*p1+per-q; long long int b=(p1-1)*p; while(b) { long long int r=a%b; a=b; b=r; } cout << 1LL * (q*p1+per-q)/a << '/' << 1LL * ((p1-1)*p)/a; } }