026.阿拉伯数字转换为罗马数字

简介: 026.阿拉伯数字转换为罗马数字
#include <stdio.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"}};
main(int argc,char *argv[ ])
{
  int low,high;
  char roman[25];
  if(argc<2)
  { printf("Usage:roman decimal_number\n");/*运行程序需带整数参数*/
    exit(0);
  }
  high=low=atoi(argv[1]);/*将第一个参数转换成整数*/
  checknum(low);
  if(argc>2)
  {/*带两个参数*/
  high=atoi(argv[2]);
  checknum(high);
  if(low>high)
    {
      low=high;
      high=atoi(argv[1]);
    }
  }
  else
    low=1;
  for(;low<=high;low++)
  {
    to_roman(low,roman);
    printf("%d\t%s\n",low,roman);
  }
}
checknum(int val)/*检查参数合理性*/
{
  if(val<1||val>9999)
  {
    printf("The number must be in range 1..9999.\n");
    exit(0);
  }
}
to_roman(int decimal,char roman[ ])/*将整数转换成罗马数字表示*/
{
  int power,index;
  roman[0]='\0';
  for(power=0;power<ROWS;power++)
    for(index=0;index<COLS;index++)
      while(decimal>=nums[power][index])
      {
        strcat(roman,roms[power][index]);
        decimal-=nums[power][index];
      }
}
相关文章
|
2月前
整数转罗马数字
罗马数字由 I、V、X、L、C、D、M 七种字符组成,分别代表 1、5、10、50、100、500、1000。通常小数值位于大值右侧,如 12 表示为 XII;特殊情况下,小值位于大值左侧表示减法,如 4 表示为 IV。转换规则适用于 1 至 3999 的整数。
30 0
|
5月前
|
Java
罗马数字转整数
这篇文章提供了一个Java方法,用于将罗马数字转换为整数,通过一个字符一个字符地解析罗马数字字符串并根据特定规则进行相应的加法或减法运算。
|
8月前
13. 罗马数字转整数
13. 罗马数字转整数
52 2
|
8月前
12. 整数转罗马数字
12. 整数转罗马数字
65 1
|
7月前
13.罗马数字转整数
13.罗马数字转整数
|
7月前
|
算法
12.整数转罗马数字
12.整数转罗马数字
|
8月前
345.反转字符串中的元音字母
345.反转字符串中的元音字母
35 0
|
8月前
|
测试技术
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
【力扣】13. 罗马数字转整数、12. 整数转罗马数字
LeetCode:13、罗马数字转整数
LeetCode:13、罗马数字转整数
|
8月前
|
Java 测试技术
java字符串练习题5、罗马数字转整数
java字符串练习题5、罗马数字转整数
71 0