关于leetcode:12整数转罗马数字LeetCodeC语言

5次阅读

共计 977 个字符,预计需要花费 3 分钟才能阅读完成。

办法一、贪婪算法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * intToRoman(int num) {
  struct intToRoman
  {
    int num;
    char *str;
  } list[13] = {{1000, "M"},
      {900, "CM"},
      {500, "D"},
      {400, "CD"},
      {100, "C"},
      {90, "XC"},
      {50, "L"},
      {40, "XL"},
      {10, "X"},
      {9, "IX"},
      {5, "V"},
      {4, "IV"},
      {1, "I"},
  };
  int count[13] = {0};
  char *str = (char*)malloc(17 * sizeof(char));
  memset(str, '\0', 17);
  for (int i = 0; i < 13; i++) {int count = num / list[i].num;
      while (count-- > 0)
      {strcat(str, list[i].str);
      }
      num %= list[i].num;
  }
  strcat(str, '\0');
  return str;
}

int main(void) {
  int num = 3999;
  printf("%s\n", intToRoman(num));
}

或者

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char * intToRoman(int num) {int numArr[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
  char *roman[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
  int count[13] = {0};
  char *str = (char*)malloc(17 * sizeof(char));
  memset(str, '\0', 17);
  for (int i = 0; i < 13; i++) {int count = num / numArr[i];
      while (count-- > 0)
      {strcat(str, roman[i]);
      }
      num %= numArr[i];
  }
  return str;
}

int main(void) {
  int num = 3999;
  printf("%s\n", intToRoman(num));
}
正文完
 0