Convertendo números decimais para números romanos

function calcula($tipo,$aux){
	$num[0]='';
	$num[1]='I';
	$num[5]='V';
	$num[10]='X';
	$num[50]='L';
	$num[100]='C';
	$num[500]='D';
	$num[1000]='M';
	
	$indice[4]=1000;
	$indice[3]=100;
	$indice[2]=10;
	$indice[1]=1;
	
	$valor=$indice[$tipo];
	
	if(($valor*$aux)==(1*$valor)){
		return $num[($valor*1)];
	}elseif(($valor*$aux)==(2*$valor)){
		return $num[($valor*1)].$num[($valor*1)];
	}elseif(($valor*$aux)==(3*$valor)){
		return $num[($valor*1)].$num[($valor*1)].$num[($valor*1)];
	}elseif(($valor*$aux)==(4*$valor)){
		return $num[($valor*1)].$num[($valor*5)];
	}elseif(($valor*$aux)==(5*$valor)){
		return $num[($valor*5)];
	}elseif(($valor*$aux)==(6*$valor)){
		return $num[($valor*5)].$num[($valor*1)];
	}elseif(($valor*$aux)==(7*$valor)){
		return $num[($valor*5)].$num[($valor*1)].$num[($valor*1)];
	}elseif(($valor*$aux)==(8*$valor)){
		return $num[($valor*5)].$num[($valor*1)].$num[($valor*1)].$num[($valor*1)];
	}elseif(($valor*$aux)==(9*$valor)){
		return $num[($valor*1)].$num[($valor*10)];
	}
}

function toRoman($numero){
	if($numero>=1 and $numero<=9999){
		$resultado='';

		# 1000 < $aux < 4000 #
		$aux=(int)($numero/1000);
		$resultado.=calcula(4,$aux);
		
		# 100 < $numero < 900 #
		$aux=(int)(($numero%1000)/100);
		$resultado.=calcula(3,$aux);
		
		# 10 < $numero < 90 #
		$aux=(int)((($numero%1000)%100)/10);
		$resultado.=calcula(2,$aux);
		
		# 1 < $numero < 10 #
		$aux=(int)((($numero%1000)%100)%10);
		$resultado.=calcula(1,$aux);
		
		return $resultado;
	}else{
		return false;
	}
}

echo toRoman(2012);

Resultado: MMXII

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s