Visualizzazione dei risultati da 1 a 4 su 4

Discussione: somma in basi diverse

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    31

    somma in basi diverse

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: somma in basi diverse

    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...
    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.

    Fai un esempio di cosa passeresti e vorresti ottenere .... perché altrimenti non è chiaro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    31
    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.)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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
    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.

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.