<span style="font-size:18px;">#include<stdio.h> #include<stdlib.h> #include<string.h> #define ROWS 4 #define COLS 4 int nums[ROWS][COLS]={{1000,1000,1000,1000},{900,500,400,100},{90,50,40,10},{9,5,4,1}}; char *roms[ROWS][COLS]={{"m","m","m","m"},{"cm","d","cd","c"},{"xc","l","xl","x"},{"ix","v","iv","i"}};/*二维的数组指针*/ void judge(int num)//判断输入的数字是否在制定范围内 { if(num<1||num>9999) { printf("please input the right number!\n"); exit(0); } } void trans(int num,char roman[])//将阿拉伯数字转化为罗马数字 { int i,j; roman[0]='\0';/*这一步是非常必要的,因为strcat函数将会找第一个字符串的'\0',找到之后将其去掉然后 复制字符串,如果不初始化,第二个字符串的内容没法复制在第一个最后*/ for(i=0;i<ROWS;i++) { for(j=0;j<COLS;j++) { while(num>=nums[i][j])/*设置为循环*/ { printf("%s\n",roman); strcat(roman,roms[i][j]); num-=nums[i][j]; } } } } void main(int argc,char *argv[]) { char roman[25]; int low,high; if(argc<2) { printf("please input number!\n"); exit(0); } low=high=atoi(argv[1]);//atoi函数就是将字符串转化为整数 judge(low); if(argc>2) { high=atoi(argv[2]);//本程序最多只能成功接收三个字符串 judge(high); if(low>high) { low=high; high=atoi(argv[1]); } } else low=1; for(;low<=high;low++) { trans(low,roman); printf("%4d=%s\n",low,roman); } }</span>本程序在dos命令状态中输入文件路径和两个字符串(将会转化成整型),将会输出两个整数之间的所有阿拉伯数的罗马数字。
原文:http://blog.csdn.net/zxx150633/article/details/38730141