罗马数字共有七个,即
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");
}