2019年2月25日月曜日

開発環境

Modern C++チャレンジ ―C++17プログラミング力を鍛える100問 (Marius Bancila(著)、島 敏博(監修)、黒川 利明(翻訳)、オライリージャパン)の1章(数学の問題)、問題11(ローマ数字に変換)の解答を求めてみる。

コード

#include <iostream>

int main()
{
  for (size_t i = 1; i <= 100; i++)
  {
    std::cout << i << ": ";
    size_t r = i / 100;
    size_t n = i % 100;
    for (size_t i = 0; i < r; i++)
    {
      std::cout << 'C';
    }
    r = n / 10;
    n %= 10;
    if (r == 9)
    {
      std::cout << "XC";
    }
    else if (r == 4)
    {
      std::cout << "XL";
    }
    else
    {
      if (r / 5)
      {
        std::cout << 'L';
      }
      for (size_t i = 0; i < r % 5; i++)
      {
        std::cout << 'X';
      }
    }
    r = n;
    if (r == 9)
    {
      std::cout << "IX";
    }
    else if (r == 4)
    {
      std::cout << "IV";
    }
    else
    {
      if (r / 5)
      {
        std::cout << 'V';
      }
      for (size_t i = 0; i < r % 5; i++)
      {
        std::cout << 'I';
      }
    }
    std::cout << std::endl;
  }
}

入出力結果(cmd(コマンドプロンプト)、Terminal)

Active code page: 65001

C:\Users\...>cl /O2 sample11.cpp && sample11.exe
Microsoft(R) C/C++ Optimizing Compiler Version 19.16.27027.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

sample11.cpp
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。
Microsoft (R) Incremental Linker Version 14.16.27027.1
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:sample11.exe
sample11.obj
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

C:\Users\...>

1から100まで。なので使うローマ数字はI(1)、V(5)、X(10)、L(50)、C(100)。

0 コメント:

コメントを投稿