As we're all throwing in examples in different languages, heres the src to a converter I had to do in college last year :

... pity its the wrong way around though

Code:
public class convert
{
	public static void main (String[] args)
	{		

		int userInput;
		System.out.print("Please enter a number to convert : ");
                userInput = TextIO.getInt();
		if ((userInput > 3999) || (userInput < 0))
		{
			System.out.println("Can only convert numbers between 0 and 3999");
		}
		if ((Integer.toString(userInput).length() > 0) && (Integer.toString(userInput).length() < 5))
		{
			System.out.println(converter(userInput));
		}

	}
	
	public static String converter(int int_number) {
		String to_return = "";
		if (Integer.toString(int_number).length() == 1)
		{
			to_return = onesToRomanNumerals(int_number);
		}
		else if (Integer.toString(int_number).length() == 2) 
		{
			to_return = tensToRomanNumerals(int_number);
		}
		else if (Integer.toString(int_number).length() == 3)
		{	
			to_return = hunsToRomanNumerals(int_number);
		}
		else if (Integer.toString(int_number).length() == 4)
		{
			to_return = thousandsToRomanNumerals(int_number);
		}

		return to_return;
	}
	
	public static String thousandsToRomanNumerals(int int_number) {
		String var_temp = Integer.toString(int_number);
		String var_huns = var_temp.substring(var_temp.length() - 3);
		String var_thou = var_temp.substring(var_temp.length() - 4, var_temp.length() - 3);
		String to_return = "";

		switch (Integer.parseInt(var_thou)) {
			case 0:   to_return = hunsToRomanNumerals(Integer.parseInt(var_huns));
				  break;
			case 1:   to_return = "M" + hunsToRomanNumerals(Integer.parseInt(var_huns));
				  break;
			case 2:   to_return = "MM" + hunsToRomanNumerals(Integer.parseInt(var_huns));
				  break;
			case 3:   to_return = "MMM" + hunsToRomanNumerals(Integer.parseInt(var_huns));
				  break;
		}
		return to_return;
	}
	public static String hunsToRomanNumerals(int int_number) {
		String var_temp = Integer.toString(int_number);
		String var_tens = "", var_huns = "";
		if (Integer.toString(int_number).length() == 3)
		{	
			var_tens = var_temp.substring(var_temp.length() - 2);
			var_huns = var_temp.substring(var_temp.length() - 3, var_temp.length() - 2);
		}
		else if (Integer.toString(int_number).length() == 2)
		{	
			var_tens = var_temp.substring(var_temp.length() - 2);
			var_huns = "0";
		}
		else if (Integer.toString(int_number).length() == 1)
		{	
			var_tens = "0";
			var_huns = "0";
		}
		String to_return = "";

		switch (Integer.parseInt(var_huns)) {
			case 0:   to_return = tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 1:   to_return = "C"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 2:   to_return = "CC"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 3:   to_return = "CCC"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 4:   to_return = "CD"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 5:   to_return = "D"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 6:   to_return = "DC"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 7:   to_return = "DCC"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 8:   to_return = "DCCC"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
			case 9:   to_return = "CM"  + tensToRomanNumerals(Integer.parseInt(var_tens));
				  break;
		}
		return to_return;
	}

	public static String tensToRomanNumerals(int int_number) {
		
		String var_temp = Integer.toString(int_number);
		String var_ones = "", var_tens = "";
		if (Integer.toString(int_number).length() == 1)
		{
			var_ones = Integer.toString(int_number);
			var_tens = "0";
		}
		else if (Integer.toString(int_number).length() == 2)
		{
			var_ones = var_temp.substring(var_temp.length() - 1);
			var_tens = var_temp.substring(var_temp.length() - 2, var_temp.length() - 1);
		}

		String to_return = "";

		switch (Integer.parseInt(var_tens)) {
			case 0:   to_return = onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 1:   to_return = "X"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 2:   to_return = "XX"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 3:   to_return = "XXX"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 4:   to_return = "XL"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 5:   to_return = "L"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 6:   to_return = "LX"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 7:   to_return = "LXX"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 8:   to_return = "LXXX"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
			case 9:   to_return = "XC"  + onesToRomanNumerals(Integer.parseInt(var_ones));
				  break;
		}
		
		
		return to_return;

	}

	public static String onesToRomanNumerals(int int_number) {
		String var_ones = Integer.toString(int_number);
		var_ones = var_ones.substring(var_ones.length() - 1 );
		String to_return = "";

		switch (Integer.parseInt(var_ones)) {
			case 0: to_return = "";
				break;
			case 1: to_return = "I";
				break;
			case 2: to_return = "II";
				break;
			case 3: to_return = "III";
				break;
			case 4: to_return = "IV";
				break;
			case 5: to_return = "V";
				break;
			case 6: to_return = "VI";
				break;
			case 7: to_return = "VII";
				break;
			case 8: to_return = "VIII";
				break;
			case 9: to_return = "IX";
				break;
		}

		return to_return;
	}


}