devo creare un metodo sommaBase(int a, int b, int base); dove "a" e "b" sono due numeri in base "base" e "base" e' appunto la base in cui deve ritornarmi il risultato...
spero di essere stato chiaro...
qualcuno puo' aiutarmi?
grazie
devo creare un metodo sommaBase(int a, int b, int base); dove "a" e "b" sono due numeri in base "base" e "base" e' appunto la base in cui deve ritornarmi il risultato...
spero di essere stato chiaro...
qualcuno puo' aiutarmi?
grazie
No mi spiace. E non ha molto senso perché un valore contenuto in una variabile di tipo es. int non è che "ha una base qualunque" .... un int in Java sono 32 bit.Originariamente inviato da Jhonny85
devo creare un metodo sommaBase(int a, int b, int base); dove "a" e "b" sono due numeri in base "base" e "base" e' appunto la base in cui deve ritornarmi il risultato...
spero di essere stato chiaro...
Fai un esempio di cosa passeresti e vorresti ottenere .... perché altrimenti non è chiaro.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
int ris = sommaBase(10, 11, 2);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 101";
int ris = sommaBase(10, 11, 10);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 21";
int ris = sommaBase(10, 11, 8);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 21";//17 in decimale
ovviamente non per qualunque base per basi fino alle 10(cioe' tutte quelle che non usano lettere come siboli dell'alfabeto.)
In questo senso (molto particolare) sì ok. Ed è chiaro però che un int può avere un valore che magari non è valido per la base passata (es. metti 13 nel primo esempio in base 2). Ma questo è un altro discorso .... spetta a te garantire e/o verificare in un certo punto che non accada.Originariamente inviato da Jhonny85
int ris = sommaBase(10, 11, 2);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 101";
int ris = sommaBase(10, 11, 10);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 21";
int ris = sommaBase(10, 11, 8);
println("ris = "+ris);
a video dovrebbe comparire: "ris = 21";//17 in decimale
Ma torniamo alla logica: se tu dato un valore (che qui rappresento in decimale) come 11 vuoi che "rappresenti" in un certo senso particolare 11 in binario, ovviamente devi fare dei calcoli.
Cioè detto in altro modo, le cifre decimali del valore le vuoi "vedere" come cifre in quella base specifica. E anche per il risultato deduco dagli esempi che vuoi avere un int il cui valore stampato in decimale viene "visto" come il valore in quella certa base.
Prendiamo il primo esempio: 10 + 11 (base 2) --> 101
Devi fare delle divisioni per 10 ed ottenere 1 e 0 e poi 1 e 1.
1 + 0 (i due bassi) in decimale fa 1 e idem anche in base 2
1 + 1 (i due alti) in decimale fa 2 e tu "sapendo" che è in base 2 devi fare una divisione e un modulo (resto della divisione) 2 / 2 = 1 (il riporto) e 2 % 2 = 0 (il resto che è la somma)
Divisione/modulo li fai anche per la parte bassa, che però darebbe riporto 0 e resto (somma) 1. Quindi come vedi la logica è "generalizzabile".
Pertanto appunto si ha 1 0 1
Dopodiché devi creare di nuovo il valore in decimale facendo moltiplicazioni per 10 ed ottenere 101 in decimale.
EDIT: e anzi, ci sarebbe anche un altro modo (direi anche più semplice), visto in un'altra ottica. Dati i due numeri decimali es. 10 e 11 "visti" in base 2, fai i calcoli per ottenere 2 e 3. Quindi sommi banalmente i due int ottenuti ed hai 5. Ora dal valore 5 devi ottenere il valore decimale 101 che sarà poi "visto" in base 2.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet