http://acm.hrbust.edu.cn/contests/index.php?act=showproblem&cid=264&p=J
这个题目其实挺简单的,要分析到,如果要完整地表达所给范围内的数字,应该由哪些基本数字构成,分析可以知道,类似于4,9这样的数比较特殊,所以也要存入数组中,然后,由大到小遍历一遍,就可以得出所要求得的罗马数字。
#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int num[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string rom[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string roman(int m)
{
string s;
int i=0;
while(m)
{
if(m>=num[i])
{
s+=rom[i];
m-=num[i];
}
else
{
i++;
}
}
return s;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
string ss= roman(n);
cout<<ss<<endl;
}
return 0;
}