罗马数表示整数

时间:2021-07-16 17:19:27

罗马数字共有七个,即
I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。

按照下面三条规则可以表示任意正整数。

重复数次:一个罗马数字重复几次,就表示这个数的几倍。

右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,
表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗
马数字,表示大数字减小数字。但是,左减不能跨越等级。
比如,99不可以用IC表示,用XCIX表示

基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个,比如40不能用XXXX,而用XL表示

设计一个函数,将100(包括100)以内的整数转换成罗马数字,超过100不考虑

codes:

const char cSymbol[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};

void CovertToRoma(int iVal)
{
    int iRemain;
 for(int i = 3; i >= 0; i--)
 {
  iRemain = iVal / (int)pow(10, i);
  if(iRemain > 0 && iRemain < 4)
  {
   for(int j = 0; j < iRemain; j++)
   {
    cout << cSymbol[2*i];
   }
  }
  if(iRemain == 4)
  {
   cout << cSymbol[2*i] << cSymbol[2*i + 1];
  }
  if(iRemain >= 5 && iRemain < 9)
  {
   cout << cSymbol[2*i + 1];
   for(int j = 0; j < iRemain - 5; j++)
   {
    cout << cSymbol[2*i];
   }
  }
  if(iRemain == 9)
  {
   cout << cSymbol[2*i] << cSymbol[2*(i + 1)];
  }
  if(iRemain )
  iVal = iVal % (int)pow(10, i);

 }
}
void main()
{

 for(int i = 1; i < 4000; i++)
 {
  CovertToRoma(i);
  cout << endl;
 }
 system("pause");

}