55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| 
 | |
| namespace Volian.Controls.Library
 | |
| {
 | |
| 	public static class RomanNumeral
 | |
| 	{
 | |
| 		private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | |
| 		private enum RomanOffset : int
 | |
| 		{
 | |
| 			Hundreds = 2,
 | |
| 			Tens = 4,
 | |
| 			Units = 6
 | |
| 		}
 | |
| 		private static string _Romans = "MDCLXVI";
 | |
| 		private static string RomanPart(RomanOffset offset, int value)
 | |
| 		{
 | |
| 			int iFive = value / 5;
 | |
| 			int iUnits = value % 5;
 | |
| 			int iFour = iUnits / 4;
 | |
| 			return _Romans.Substring(((int)offset), iFour) +
 | |
| 				_Romans.Substring(((int)offset) - iFive - iFour, iFive | iFour) + 
 | |
| 				"".PadRight(iUnits % 4, _Romans[((int)offset)]);
 | |
| 		}
 | |
| 		public static string Convert(int number)
 | |
| 		{
 | |
| 			int thousands = number / 1000;
 | |
| 			int hundreds = (number % 1000) / 100;
 | |
| 			int tens = (number % 100) / 10;
 | |
| 			int units = number % 10;
 | |
| 			return "".PadRight(thousands, _Romans[0]) + 
 | |
| 				RomanPart(RomanOffset.Hundreds, hundreds) + 
 | |
| 				RomanPart(RomanOffset.Tens, tens) + 
 | |
| 				RomanPart(RomanOffset.Units, units);
 | |
| 		}
 | |
| 	//  private static int[] _TestRomans = new int[] {
 | |
| 	//    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,69,70,80,90,99,
 | |
| 	//    100,200,400,500,600,666,700,800,900,1000,1444,1666,1945,1997,1999,2000,2007,3000
 | |
| 	//  };
 | |
| 	//  public static void ShowRomans()
 | |
| 	//  {
 | |
| 	//    for (int i = 0; i < _TestRomans.Length; i++)
 | |
| 	//    {
 | |
| 		//      if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", _TestRomans[i], Convert(_TestRomans[i]));
 | |
| 	//    }
 | |
| 		//    //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 4, Convert(4));
 | |
| 		//    //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 5, Convert(5));
 | |
| 		//    //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 6, Convert(6));
 | |
| 		//    //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 8, Convert(8));
 | |
| 		//    //if(_MyLog.IsInfoEnabled)_MyLog.InfoFormat("{0},{1}", 9, Convert(9));
 | |
| 	//  }
 | |
| 	}
 | |
| }
 | 
