コード
#include <stdio.h> int dec2roman(unsigned int val, char *roman_digit) { int error; int i; int v; if(roman_digit == 0 || *roman_digit == '\0' || val > 3 && *(roman_digit+1) == '\0' || val > 8 && *(roman_digit+2) == '\0' ) return 1; if(val/10) { error = dec2roman(val/10, roman_digit+2); if(error) return error; } if(val % 10 % 5 == 4) printf("%c", *roman_digit); v = (val % 10 + 1) / 5; if(v) printf("%c", *(roman_digit+v)); for(i = val % 10 % 5; i % 4 != 0; i--) { printf("%c", *roman_digit); } return 0; } int main(int argc, char** argv) { int val; for(val = 1; val < 4001; val++) { printf("%d = ", val); if( dec2roman( (unsigned int)val, "IVXLCDM") ) printf("error.\n"); else printf("\n"); } return 0; }
実行結果
1 = I 2 = II 3 = III 4 = IV 5 = V 6 = VI 7 = VII 8 = VIII 9 = IX 10 = X 11 = XI 12 = XII 13 = XIII 14 = XIV 15 = XV 16 = XVI 17 = XVII 18 = XVIII 19 = XIX 20 = XX 21 = XXI 22 = XXII 23 = XXIII 24 = XXIV 25 = XXV 26 = XXVI 27 = XXVII 28 = XXVIII 29 = XXIX 30 = XXX 31 = XXXI 32 = XXXII 33 = XXXIII 34 = XXXIV 35 = XXXV 36 = XXXVI 37 = XXXVII 38 = XXXVIII 39 = XXXIX 40 = XL 41 = XLI 42 = XLII 43 = XLIII 44 = XLIV 45 = XLV 46 = XLVI 47 = XLVII 48 = XLVIII 49 = XLIX 50 = L 51 = LI 52 = LII 53 = LIII 54 = LIV 55 = LV 56 = LVI 57 = LVII 58 = LVIII 59 = LIX 60 = LX 61 = LXI 62 = LXII 63 = LXIII 64 = LXIV 65 = LXV 66 = LXVI 67 = LXVII 68 = LXVIII 69 = LXIX 70 = LXX 71 = LXXI 72 = LXXII 73 = LXXIII 74 = LXXIV 75 = LXXV 76 = LXXVI 77 = LXXVII 78 = LXXVIII 79 = LXXIX 80 = LXXX 81 = LXXXI 82 = LXXXII 83 = LXXXIII 84 = LXXXIV 85 = LXXXV 86 = LXXXVI 87 = LXXXVII 88 = LXXXVIII 89 = LXXXIX 90 = XC 91 = XCI 92 = XCII 93 = XCIII 94 = XCIV 95 = XCV 96 = XCVI 97 = XCVII 98 = XCVIII 99 = XCIX 100 = C 101 = CI 102 = CII 103 = CIII 104 = CIV 105 = CV 106 = CVI 107 = CVII 108 = CVIII 109 = CIX 110 = CX 111 = CXI 112 = CXII 113 = CXIII 114 = CXIV 115 = CXV 116 = CXVI 117 = CXVII 118 = CXVIII 119 = CXIX 120 = CXX ... 135 = CXXXV 136 = CXXXVI 137 = CXXXVII 138 = CXXXVIII 139 = CXXXIX 140 = CXL 141 = CXLI 142 = CXLII 143 = CXLIII 144 = CXLIV 145 = CXLV 146 = CXLVI 147 = CXLVII 148 = CXLVIII 149 = CXLIX 150 = CL 151 = CLI 152 = CLII 153 = CLIII 154 = CLIV 155 = CLV 156 = CLVI 157 = CLVII 158 = CLVIII 159 = CLIX ... 186 = CLXXXVI 187 = CLXXXVII 188 = CLXXXVIII 189 = CLXXXIX 190 = CXC 191 = CXCI 192 = CXCII 193 = CXCIII 194 = CXCIV 195 = CXCV 196 = CXCVI 197 = CXCVII 198 = CXCVIII 199 = CXCIX 200 = CC 201 = CCI 202 = CCII 203 = CCIII 204 = CCIV 205 = CCV 206 = CCVI 207 = CCVII 208 = CCVIII 209 = CCIX 210 = CCX 211 = CCXI 212 = CCXII 213 = CCXIII 214 = CCXIV 215 = CCXV 216 = CCXVI 217 = CCXVII 218 = CCXVIII 219 = CCXIX 220 = CCXX ... 390 = CCCXC 391 = CCCXCI 392 = CCCXCII 393 = CCCXCIII 394 = CCCXCIV 395 = CCCXCV 396 = CCCXCVI 397 = CCCXCVII 398 = CCCXCVIII 399 = CCCXCIX 400 = CD 401 = CDI 402 = CDII 403 = CDIII 404 = CDIV 405 = CDV 406 = CDVI 407 = CDVII 408 = CDVIII 409 = CDIX 410 = CDX ... 490 = CDXC 491 = CDXCI 492 = CDXCII 493 = CDXCIII 494 = CDXCIV 495 = CDXCV 496 = CDXCVI 497 = CDXCVII 498 = CDXCVIII 499 = CDXCIX 500 = D 501 = DI 502 = DII 503 = DIII 504 = DIV 505 = DV 506 = DVI 507 = DVII 508 = DVIII 509 = DIX 510 = DX ... 898 = DCCCXCVIII 899 = DCCCXCIX 900 = CM 901 = CMI 902 = CMII 903 = CMIII 904 = CMIV 905 = CMV 906 = CMVI 907 = CMVII 908 = CMVIII 909 = CMIX 910 = CMX 911 = CMXI 912 = CMXII 913 = CMXIII 914 = CMXIV 915 = CMXV 916 = CMXVI 917 = CMXVII 918 = CMXVIII 919 = CMXIX 920 = CMXX ... 980 = CMLXXX 981 = CMLXXXI 982 = CMLXXXII 983 = CMLXXXIII 984 = CMLXXXIV 985 = CMLXXXV 986 = CMLXXXVI 987 = CMLXXXVII 988 = CMLXXXVIII 989 = CMLXXXIX 990 = CMXC 991 = CMXCI 992 = CMXCII 993 = CMXCIII 994 = CMXCIV 995 = CMXCV 996 = CMXCVI 997 = CMXCVII 998 = CMXCVIII 999 = CMXCIX 1000 = M 1001 = MI 1002 = MII 1003 = MIII 1004 = MIV 1005 = MV 1006 = MVI 1007 = MVII 1008 = MVIII 1009 = MIX 1010 = MX ... 3990 = MMMCMXC 3991 = MMMCMXCI 3992 = MMMCMXCII 3993 = MMMCMXCIII 3994 = MMMCMXCIV 3995 = MMMCMXCV 3996 = MMMCMXCVI 3997 = MMMCMXCVII 3998 = MMMCMXCVIII 3999 = MMMCMXCIX 4000 = error.