Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Rédacteur
    Avatar de danielhagnoul
    Homme Profil pro Daniel Hagnoul
    Étudiant perpétuel
    Inscrit en
    février 2009
    Messages
    4 592
    Détails du profil
    Informations personnelles :
    Nom : Homme Daniel Hagnoul
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2009
    Messages : 4 592
    Points : 16 658
    Points
    16 658

    Par défaut Conversion de chiffres arabes en chiffres romains et inversement

    Pour le plaisir et au bénéfice des étudiants de passage.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    var A = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ],
    	R = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ],
    	Alength = A.length;
     
    // conversion d'un entier en nombre romain
    function AtoR( nb ){
    	// on s'assure d'avoir un entier entre 1 et 3999.
    	var x = parseInt( nb, 10 ) || 1,
    		str = "";
     
    	if ( x < 1 ){
    		x = 1;
    	} else if ( x > 3999 ){
    		x = 3999;
    	}
     
    	// pour chaque A[ i ], 
    	// tant que x est supérieur ou égal
    	// on déduit A[ i ] de x.
    	// arrêt de la boucle si x == 0
    	for ( var i = 0; i < Alength; ++i ){
    		while ( x >= A[ i ] ){
    			x -= A[ i ];
    			str += R[ i ];
    		}
     
    		if ( x == 0 ){
    			break;
    		}
    	}
     
    	return str;
    }
     
    // conversion d'un nombre romain en entier	
    function RtoA( str ){
    	// on s'assure d'avoir un texte ayant au moins un caractère.
    	if ( ( typeof str != "string" ) || ( str.length < 1 ) ) return;
     
    	var x = 0,
    		item = "";
     
    	// pour chaque R[ i ], 
    	// si R[ i ] est égal à item
    	// on ajoute A[ i ] à x
    	// et on enlève item de str.
    	for ( var i = 0; i < Alength; ++i ){
     
    		while ( str.length >= R[ i ].length ){
    			item = str.slice( 0, R[ i ].length );
     
    			if ( R[ i ] == item ){
    				x += A[ i ];
    				str = str.substring( R[ i ].length );
    			} else {
    				break;
    			}
    		}
    	}
     
    	return x;
    }
     
    /* Test */
     
    var str = "",
    	x = 0,
    	tab = [];
     
    for ( var n = 1; n < 4000; n++ ){
    	str = AtoR( n );
    	x = RtoA( str );
     
    	tab.push( [ n, str, x ] );
    }
     
    console.log( tab );

    Propositions de Q/R pour la FAQ jQuery

    plugin dialogModal

    Si un message vous a aidé ou vous semble pertinent, votez pour lui !

  2. #2
    Responsable JavaScript & AJAX

    Avatar de vermine
    Inscrit en
    mars 2008
    Messages
    4 674
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : mars 2008
    Messages : 4 674
    Points : 37 816
    Points
    37 816

    Par défaut

    L'idée est sympa.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •