Come convertire i numeri arabi in numeri romani con PHP

Come convertire i numeri arabi in numeri romani con PHP

La conversione dei numeri arabi in numeri romani è un compito interessante, specialmente se si lavora con linguaggi di programmazione come PHP. I numeri romani sono un sistema numerico non posizionale utilizzato nell'antica Roma, ancora oggi utilizzato in vari contesti, come orologi, monumenti o nomi di eventi. In questo articolo vedremo come implementare una funzione in PHP che converta un numero arabo (come 1, 2, 3, ecc.) in un numero romano (I, II, III, ecc.).

Prima di tutto, una breve introduzione ai numeri romani. I simboli principali sono:

SimboloValore
I1
V5
X10
L50
C100
D500
M1000

Le regole principali per la conversione sono:

  • Un simbolo più grande che precede uno più piccolo viene sommato (es. VI = 6, XV = 15).
  • Un simbolo più piccolo che precede uno più grande viene sottratto (es. IV = 4, IX = 9).

Ora, vediamo come implementare una funzione PHP che segua queste regole.

Per convertire un numero arabo in un numero romano in PHP, possiamo seguire un approccio piuttosto semplice, utilizzando un array che associa i simboli romani ai loro valori numerici corrispondenti. Quindi, itereremo sull'array e sottrarremo il valore numerico finché non avremo convertito tutto il numero.


function arabicToRoman($num) {
    // Mappatura dei numeri romani con i rispettivi valori
    $map = [
        'M'  => 1000,
        'CM' => 900,
        'D'  => 500,
        'CD' => 400,
        'C'  => 100,
        'XC' => 90,
        'L'  => 50,
        'XL' => 40,
        'X'  => 10,
        'IX' => 9,
        'V'  => 5,
        'IV' => 4,
        'I'  => 1
    ];
    
    // Variabile per memorizzare il risultato
    $roman = '';
    
    // Itera sulla mappa, sottraendo i valori e concatenando i simboli romani
    foreach ($map as $romanChar => $value) {
        // Finché il numero è maggiore o uguale al valore corrente, sottrai il valore
        while ($num >= $value) {
            $roman .= $romanChar;  // Aggiungi il simbolo romano al risultato
            $num -= $value;        // Sottrai il valore dal numero
        }
    }
    
    return $roman;
}

// Test della funzione
echo arabicToRoman(1994); // Output: MCMXCIV

Spiegazione del codice:

  1. Mappatura dei valori: Abbiamo un array $map che associa i simboli romani (come M, CM, D, ecc.) ai loro corrispondenti valori numerici. L'ordine è importante: i numeri più grandi vengono elencati per primi per garantire che sottraiamo i valori corretti (ad esempio, 900 viene rappresentato come CM).

  2. Iterazione: Usando un ciclo foreach, iteriamo sulla mappa e controlliamo se il numero da convertire è maggiore o uguale al valore corrente. Se lo è, sottraiamo quel valore dal numero e concatenamo il corrispondente simbolo romano alla stringa $roman.

  3. Ritorno del risultato: Dopo aver iterato su tutti i simboli, la variabile $roman conterrà il numero convertito in formato romano.

Considerazioni:

  1. Range dei numeri: I numeri romani classici vengono utilizzati principalmente per rappresentare numeri fino a poche migliaia. Con il nostro approccio, possiamo gestire numeri fino a circa 3999. Se si volessero numeri più grandi, bisognerebbe considerare l'utilizzo di una notazione diversa (come i numeri romani con barre per indicare moltiplicazioni per 1000).

  2. Valori negativi e zero: I numeri romani non hanno una rappresentazione per lo zero o per i numeri negativi. Pertanto, è consigliabile aggiungere un controllo per gestire questi casi.

Conclusione

Convertire numeri arabi in numeri romani in PHP è un processo relativamente semplice se si utilizza un approccio basato su una mappa di conversione e un ciclo per sottrarre i valori. Questa funzione può essere utile in contesti come la formattazione di date, eventi o anche per interfacce utente grafiche che richiedono la rappresentazione di numeri romani.

Torna su