数字转为罗马数字

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

这个题在做的时候,返回值一直为空,一直不明白。后来查到,在函数内部申请的数组,返回时为null,是一个局部变量,超出这个函数内部便会失效。解决方法有两个,一个是申请全局变量,本题就是这么解决的,另外一个是申请指针,malloc空间。这样传递的时候就不会返回null。

strcat函数用来拼接两个字符串,注意第一个参数要留出足够多的空间来存储新生成的字符串。

strcpy是用来拷贝字符串的。

#include<string.h>
char str1[30];
char* intToRoman(int num) {
    char *thousands[4]={"","M","MM","MMM"};
    char *hundreds[10]={"","C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    char *tens[10] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
    char *digits[10] = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
    
    strcpy(str1,thousands[num/1000]);
    char str2[4];
    strcpy(str2,hundreds[num%1000/100]);
    char str3[4];
    strcpy(str3,tens[num%100/10]);
    char str4[4];
    strcpy(str4,digits[num%10]);
   
    strcat(str1,str2);
    strcat(str1,str3);
    strcat(str1,str4);

    return str1;

}