1000000/gcd(1000000,227273)
. Conosciuto anche come lcm(1000000,227273)/227273
. In questo caso, 1 milione.
Quello che si vuole fare è trasformare 0.227273 in una frazione nella forma più semplice. Il numero che stai cercando è quindi il denominatore di quella frazione. Dal momento che 227273/1000000 è già nella forma più semplice, il gioco è fatto. Ma se il tuo input era 100.075, allora il 75/1000 non è nella forma più semplice. La forma più semplice è 3/40, quindi la soluzione per X è 40.
Come ottimizzazione, puoi semplificare il calcolo perché sai che il denominatore iniziale è una potenza di 10, quindi i suoi unici fattori primi sono 2 e 5. Quindi tutto ciò che devi cercare nel numeratore è divisibilità per 2 e 5, che è più facile dell'algoritmo di Euclide. Naturalmente se hai già un'implementazione di gcd e/o lcm, allora questo è uno sforzo maggiore da parte tua, non di meno.
Tenere presente quando si ottiene il risultato, che i numeri in virgola mobile non possono in generale rappresentare le frazioni decimali con precisione. Quindi, una volta ottenuta la risposta matematicamente corretta, non sarà necessariamente fornire una risposta intera quando si effettua una moltiplicazione a virgola mobile. Il rovescio della medaglia è che ovviamente la domanda si applica solo se esiste un'espressione decimale finita del numero che ti interessa.
Se hai il numero come quoziente in primo luogo, allora devi trova il denominatore della sua forma più semplice direttamente, non convertendolo in decimale e troncandolo. Ad esempio, per risolvere questo problema per il numero "6 e un terzo", la risposta è 3, non una potenza di 10. Se l'input è "la radice quadrata di 2", non c'è soluzione per X.
Beh, in realtà, il più piccolo intero X con la proprietà che si richiede è 0
, ma suppongo che non vuol dire che ;-)
fonte
2010-03-12 16:03:14
Vuoi davvero dire decimale, o in virgola mobile? –
La rappresentanza non ha importanza, almeno non per me. – Davorin