办法一、贪婪算法

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