EherChen 发表于 2020-7-6 03:02:51

求助把数字转化成罗马数字

课后作业求助!!!

输入年份数字并输出以罗马数字书写的年份。 罗马数字V代表5,X代表10,L代表50,C代表100,D代表500,M代表1,000。 一些数字是通过使用一个罗马“数字”的减法来形成的; 例如,IV为4,V减去I,XL为40,CM为900,依此类推。 一些示例年份:MCM是1900,MCML是1950,MCMLX是1960,MCMXL是1940,MCMLXXXIX是1989。假设年份在1000到3000之间。

求解~

梦想灬远帆 发表于 2020-7-6 09:03:06

leetCode上有原题,你可以找找

梦想灬远帆 发表于 2020-7-6 09:04:19

看错了,LeetCode上市把罗马数字该为整数

wp231957 发表于 2020-7-6 09:23:46

我好久不玩c了,这是python代码你自己翻译一下

roman=[["","I","II","III","IV","V","VI","VII","VIII","IX"],["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
       ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],["","MM","MM","MMM"]]
str=""
for x in range(1000,3001):
    str+=roman
    str+=roman
    str+=roman
    str+=roman
    print("%d=   %s"%(x,str))
    str=""

wp231957 发表于 2020-7-6 09:32:09

梦想灬远帆 发表于 2020-7-6 09:04
看错了,LeetCode上市把罗马数字该为整数

我感觉这个更难

梦想灬远帆 发表于 2020-7-6 10:13:48

差不多,可以反推回来,知道原理就行

bin554385863 发表于 2020-7-6 11:12:37

这是我在Leecode提交的答案
int romanToInt(char *s)
{
    int slen = strlen(s);
    int sum = 0;
    /*--------------定义一个整数数组--------------- */
    int *arr = (int *)malloc(sizeof(int) * (slen));
    /*--------------转换成整数数组----------------- */
    for (size_t i = 0; i < slen; i++)
    {
      if (s == 'I')
      {
            arr = 1;
      }
      else if (s == 'V')
      {
            arr = 5;
      }
      else if (s == 'X')
      {
            arr = 10;
      }
      else if (s == 'L')
      {
            arr = 50;
      }
      else if (s == 'C')
      {
            arr = 100;
      }
      else if (s == 'D')
      {
            arr = 500;
      }
      else if (s == 'M')
      {
            arr = 1000;
      }
    }
    /*-----------调整数组元素的正负号--------------------------------- */
    for (size_t i = 0, j = 1; i <slen - 1, j < slen; i++, j = i + 1)
    {
      if (arr == 1)
      {
            if (arr < arr)
            {
                arr = -1;
            }
      }
      if (arr == 10)
      {
            if (arr < arr)
            {
                arr = -10;
            }
      }
      if (arr == 100)
      {
            if (arr < arr)
            {
                arr = -100;
            }
      }
    }
    /*----------------求和---------------------------- */
    for (size_t i = 0; i < slen; i++)
    {
      sum = sum + arr;
    }
   
   
    return sum;
    free(arr);
}

EherChen 发表于 2020-7-6 11:12:58

wp231957 发表于 2020-7-6 09:23
我好久不玩c了,这是python代码你自己翻译一下

太感谢了!!!主要就是想看过程是怎么样的。哎 刚开始接触编程, 先从c++开始学{:10_266:}
页: [1]
查看完整版本: 求助把数字转化成罗马数字