[Algoritmi] Algoritmo in c++

Messaggioda ZfreS » 06/09/2019, 11:34

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:
Codice:
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?
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1801 di 4589
Iscritto il: 22/10/2016, 17:52

Re: [Algoritmi] Algoritmo in c++

Messaggioda vict85 » 06/09/2019, 12:27

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).
vict85
Moderatore
Moderatore
 
Messaggio: 9812 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [Algoritmi] Algoritmo in c++

Messaggioda ZfreS » 06/09/2019, 13:07

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.
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1802 di 4589
Iscritto il: 22/10/2016, 17:52

Re: [Algoritmi] Algoritmo in c++

Messaggioda claudio86 » 06/09/2019, 13:27

$\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).
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 524 di 1130
Iscritto il: 09/01/2011, 15:12

Re: [Algoritmi] Algoritmo in c++

Messaggioda ZfreS » 06/09/2019, 14:08

Perfetto, grazie mille per il chiarimento!
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1803 di 4589
Iscritto il: 22/10/2016, 17:52


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite