鱼C论坛

 找回密码
 立即注册
查看: 2827|回复: 2

为什么我发布了帖子了

[复制链接]
发表于 2022-9-14 15:14:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
哪里有问题
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-14 15:14:44 | 显示全部楼层
int romanToInt(char * s){
    int longth=strlen(s);
    int i=0;
    int sum=0;
    int* flag=NULL;
    flag=(int*)malloc(longth*sizeof(int));
    for(i=0;i<longth;i++)
    {
        switch(s[i])
       { case 'I':flag[i]=1;break;
        case 'V': flag[i]=5;break;
        case 'X': flag[i]=10;break;
        case 'L': flag[i]=50;break;
        case 'C': flag[i]=100;break;
        case 'D': flag[i]=500;break;
        case 'M': flag[i]=1000;break;}

    }

    for(i=0;i<longth-1;i++)
    {
        flag[i]=flag[i]>flag[i+1]?flag[i]:-flag[i];
    }

    for(i=0;i<longth;i++)
    sum+=flag[i];

return sum;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-14 19:07:45 | 显示全部楼层
本帖最后由 cnkizy 于 2022-9-14 19:15 编辑


1.条件错了
2.还有记得free
3.多写用例测试,养成好习惯

111.png

  1. int romanToInt(char* s) {
  2.         int len = strlen(s);
  3.         int i = 0;
  4.         int sum = 0;
  5.         int* flag = (int*)malloc(len * sizeof(int));
  6.         if (flag == NULL) {                       //  <---- malloc 不一定会申请成功
  7.                 printf("内存申请失败\n");
  8.                 return 0;
  9.         }

  10.         for (i = 0; i < len; i++) {
  11.                 switch (s[i]) {
  12.                 case 'I':flag[i] = 1; break;
  13.                 case 'V': flag[i] = 5; break;
  14.                 case 'X': flag[i] = 10; break;
  15.                 case 'L': flag[i] = 50; break;
  16.                 case 'C': flag[i] = 100; break;
  17.                 case 'D': flag[i] = 500; break;
  18.                 case 'M': flag[i] = 1000; break;
  19.                 }
  20.         }

  21.         for (i = 0; i < len - 1; i++) {
  22.                 if (flag[i] >= flag[i + 1]) { //  <---  正确条件 >=
  23.                         flag[i] = flag[i];
  24.                 } else {
  25.                         flag[i] = -flag[i];
  26.                 }
  27.         }

  28.         for (i = 0; i < len; i++) {
  29.                 sum += flag[i];
  30.         }
  31.         if (flag != NULL) { // <--- 无论是否为NULL 都必须检查
  32.                 free(flag);  //  <---  malloc后记得释放内存
  33.                 flag = NULL;  //  <--- 避免指针被二次引用,虽然这里用不到,但要养成好习惯
  34.         }
  35.         return sum;
  36. }
  37. void test();
  38. int main() {
  39.         // 罗马数字转阿拉伯数字
  40.         char buff[10] = { 0 };
  41. loop:
  42.         printf("请输入罗马数字:");
  43.         scanf_s("%s",buff, 10);
  44.         printf("转换后为:%d\n", romanToInt(buff));
  45.         goto loop;
  46.         return 0;
  47. }



  48. typedef struct _roma_test {
  49.         char str[15];
  50.         int num;
  51. }ROMATEST;

  52. void test() {
  53.         ROMATEST list[] = {
  54.         {"I",1},
  55.         {"II",2},
  56.         {"III",3},
  57.         {"IV",4},
  58.         {"V",5},
  59.         {"VI",6},
  60.         {"VII",7},
  61.         {"VIII",8},
  62.         {"IX",9},
  63.         {"X",10},
  64.         {"XI",11},
  65.         {"XII",12},
  66.         {"XIII",13},
  67.         {"XIV",14},
  68.         {"XV",15},
  69.         {"XVI",16},
  70.         {"XVII",17},
  71.         {"XVIII",18},
  72.         {"XIX",19},
  73.         {"XX",20},
  74.         {"XXX",30},
  75.         {"XL",40},
  76.         {"L",50},
  77.         {"LX",60},
  78.         {"LXX",70},
  79.         {"LXXX",80},
  80.         {"XC",90},
  81.         {"XCIX",99},
  82.         {"C",100},
  83.         {"CI",101},
  84.         {"CII",102},
  85.         {"CXCIX",199},
  86.         {"CC",200},
  87.         {"CCC",300},
  88.         {"CD",400},
  89.         {"D",500},
  90.         {"DC",600},
  91.         {"DCCC",800},
  92.         {"CM",900},
  93.         {"M",1000},
  94.         {"MCD",1400},
  95.         {"MCDXXXVII",1437},
  96.         {"MD",1500},
  97.         {"MDCCC",1800},
  98.         {"MDCCCLXXX",1880},
  99.         {"MCM",1900},
  100.         {"MM",2000},
  101.         {"MMM",3000},
  102.         {"MMMCCCXXXIII",3333},
  103.         {"MMMCMXCIX",3999}
  104.         };
  105.         bool all_ok = true;
  106.         for (int i = 0; i < _countof(list);i++) {
  107.                 int mynum = romanToInt(list[i].str);
  108.                 if (list[i].num != mynum) {
  109.                         printf("发现该算法与正确的数存在差异! 正确结果:%s %d ,算法的结果是:%d\n", list[i].str, list[i].num, mynum);
  110.                         all_ok = false;
  111.                         break;
  112.                 }
  113.         }
  114.         printf("测试完毕,结果是:%s", all_ok?"算法通过测试,全部正确":"算法有误");
  115. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表