Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

guiobom131

[Resolvido] Números romanos

Recommended Posts

Eu fiz esse código e está funcionando bem, eu fiz o teste e em 1,9 s ele transformou de 1 a 10000 em romano e depois os converteu de volta

// Transforma um número natural em número romano
function dectorom ($dec) {
	if ($dec<0) {
		return '';
	}
	$dec = (int) $dec;
	$digit  = (int) ($dec / 1000);
	$dec -= $digit * 1000;
	while ($digit > 0) {
		$rom .= 'M';
		$digit--;
	}
	$a = array("I", "X", "C", "M");
	$b = array("V", "L", "D");
	$c = array("", "a", "aa", "aaa", "ab", "b", "ba", "baa", "baaa", "ac");
	for ($i=0; $i<strlen($dec); $i++) {
		$j = strlen($dec)-$i-1;
		$va = $a[$j];
		$vb = $b[$j];
		$você = $a[$j+1];
		$trans = array("a" => $va, "b" => $vb, "c" => $você);
		$str = $c[substr($dec, $i, 1)];
		$rom .= strtr($str, $trans);
	}
	return $rom;
}
// Transforma um número romano em natural
function romtodec ($rom) {
	$rom = strtoupper($rom);
	$trans = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1);
	$anterior = 1001;
	for ($i=0; $i<strlen($rom); $i++) {
		$atual = strtr(substr($rom, $i, 1), $trans);
		if ($atual>$anterior) {
			$dec -= 2*$anterior;
		}
		$dec += $atual;
		$anterior = $atual;
	}
	return $dec;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.