12.整数转罗马数字(LeetCode)——C语言

方法一、贪心算法

#include 
#include 
#include 
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 
#include 
#include 

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));
}

你可能感兴趣的:(leetcode,c,算法)