只要将普通数字转化为 ai*10^i 和形式,然后从高到低逐位转化即可。
为此,我们需要先处理出1~9, 10~90....的表
const char Sym[][10] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X",
"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "C",
"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "M",
"M", "MM", "MMM"};
int brk[15];
string gen(int x) {
string ret = "";
int idx = 0;
while (x) {
brk[idx++] = x%10;
x/=10;
}
urep(i, idx-1, 0) {
if (brk[i]) ret += Sym[i*10+brk[i]-1];
}
return ret;
}