Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/11/2012, 20h40   #1
danielhagnoul
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 843
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 62
Localisation : Belgique

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

Informations forums :
Inscription : février 2009
Messages : 3 843
Points : 14 338
Points : 14 338
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 );
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

plugin dialogModal

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/11/2012, 07h48   #2
vermine
Responsable JavaScript & AJAX

 
Avatar de vermine
 
Inscription : mars 2008
Messages : 3 993
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2008
Messages : 3 993
Points : 27 537
Points : 27 537
L'idée est sympa.
vermine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h01.


 
 
 
 
Partenaires

Hébergement Web