BNU4062:0123456789

2014-11-24 09:11:18 · 作者: · 浏览: 0
罗马数字是欧洲在阿拉伯数字(实际上是印度数字)传入之前使用的一种数码,现在应用较少.它的产生晚于中国甲骨文中的数码,更晚于埃及人的十进位数字.但是,它的产生标志着一种古代文明的进步. 罗马数字用7个拉丁字母IVXLCDM和组数规则来表示数. I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 组数规则有以下一些 最多3个可以表示为10 n的数字(I,X,C,M)可以连续放在一起,表示它们的和: II=2,CC=200,III=3,CCC=300 可表示为5*10 n的字符(V,L,D)从不连续出现。 字符一般以值递减的顺序接连出现: CCLXVIII = 100+100+50+10+5+1+1+1 = 268 但也有例外,有时,一个可表示为10 n的数出现在一个比它大的数前.在这种情况下,数值等于后面的那个数减去前面的那个数: IV = 4 IX = 9 XL = 40 不过,像XD,IC和XM这样的表达是非法的,因为前面的数比后面的数小太多,每一个用来做减去的数字必须保证他后面紧跟着的数字不超过它的10倍.对于XD(490的错误表达),应该写成 CDXC;对于IC(99的错误表达),可以写成XCIX;对于XM(990的错误表达),应该写成CMXC.

现在要求你编写程序把实现阿拉伯数字到罗马数字的转换.

Input

输入文件包含多组测试数据,每组测试数据一行,给出一个阿拉伯数字表示下的正整数,该数不超过3000.

Output

对于每一组测试数据,对应输出一行,为阿拉伯数字表示.

Sample Input

512

Sample Output

DXII
 
其实只要掌握罗马数字的规律就很简单了。。简单模拟
 
#include 
   
    
#include 
    
      int main() { int n,i,t; while(~scanf("%d",&n)) { if(n>=1000) { t=n/1000; n=n-t*1000; while(t--) printf("M"); } if(n>=100) { t=n/100; n=n-t*100; if(t<=3) while(t--) printf("C"); else if(t==4) printf("CD"); else if(t<9) { printf("D"); t-=5; while(t--) printf("C"); } else if(t==9) printf("CM"); } if(n>=10) { t=n/10; n=n-t*10; if(t<=3) while(t--) printf("X"); else if(t==4) printf("XL"); else if(t<9) { printf("L"); t-=5; while(t--) printf("X"); } else if(t==9) printf("XC"); } if(n<10) { if(n<=3) while(n--) printf("I"); else if(n==4) printf("IV"); else if(n<9) { printf("V"); n-=5; while(n--) printf("I"); } else if(n==9) printf("IX"); } printf("\n"); } return 0; }