[Algoritmi] Algoritmo in c++

oleg.fresi
Mi sono imbattuto in questo esercizio in c++: dato un numero scambiare la prima con l'ultima cifra.
Io l'ho risolto in un modo, ma poi ho voluto confrontare la mia con quelle sul web ed ho trovato una soluzione più complicata. Una volta determinata la prima e l'ultima cifra, per trovare il numero conle cifre scambiate viene applicata questa formula:
numero_nuovo = (ult_cifra * pow(10, num_cifre) + prima_cifra) + (numOrig - (prima_cifra * pow(10, num_cifre) + ult_cifra));


Sinceramente non ho capito perchè funziona questa formula. Potreste spiegarmi come la si deduce?

Risposte
vict85
Semplicemente avviene questo: \(\displaystyle 52341 = 12345 - 10000 + 50000 + 1 - 5 \). D'altra parte il tuo metodo potrebbe essere ugualmente corretto. A me per esempio non piace usare la funzione pow, quindi avrei cercato un approccio che faceva a meno di chiamarla (come minimo l'avrei pre-calcolato).

oleg.fresi
Scusa, ma non ho capito. $12345$ è già il numero con le cifre scambiate. Quindi deve saperlo a priori. Bisogna capire come partendo da $52341$ arrivi a $12345$ Ma poi sembra una formula controintuitiva. Non è tanto immediato da dedurre.

claudio862
$\text{numero} = 12345$
$\text{prima_cifra} = 1$
$\text{ultima_cifra} = 5$
$\text{a} = \text{ultima_cifra} * 10^\text{n_cifre} + \text{prima_cifra} = 50000 + 1 = 50001$
$\text{b} = \text{prima_cifra} * 10^\text{n_cifre} + \text{ultima_cifra} = 10000 + 5 = 10005$
$\text{c} = \text{numero} - \text{b} = 12345 - 10005 = 02340$
$\text{numero_nuovo} = \text{c} + \text{a} = 02340 + 50001 = 52341$

Prima sottrai per "impostare" prima e ultima cifra a zero, poi aggiungi per "impostare" prima e ultima cifra a quello che vuoi (i loro valori scambiati).

oleg.fresi
Perfetto, grazie mille per il chiarimento!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.