https://onlinejudge.u-aizu.ac.jp/challenges/sources/PCK/Prelim/0337?year=2016
解法
https://onlinejudge.u-aizu.ac.jp/solutions/problem/0337/review/3140004/hamayanhamayan/C++14
実装問題。
なるべく簡単に実装できるように実装方針をまず考えよう。
プログラムで扱いやすいように和暦の情報を配列に入れておこう。
i番目の和暦は名前がname[i]で、西暦ではL[i]~R[i]年である。
これを用意することでスマートに実装ができる(R[i]を使わない実装もあるだろう)。
E=0のときは、ループで4つ回してYがL[i]~R[i]の中に収まっている和暦が分かる。
和暦が分かれば、Y-L[i]+1とすることでその和暦での年が計算できる。
0<Eのときは、和暦を明治、大正、昭和、平成の順にしておけば、E-1が対応する和暦のindexとなる。
すると、和暦での年を西暦に変換するにはL[E-1]+Y-1とすればいい。
int E, Y; string name[4] = { "M", "T", "S", "H" }; int L[4] = { 1868, 1912, 1926, 1989 }; int R[4] = { 1911, 1925, 1988, 2016 }; //--------------------------------------------------------------------------------------------------- void _main() { cin >> E >> Y; if (E == 0) { rep(i, 0, 4) if (L[i] <= Y and Y <= R[i]) { printf("%s%d\n", name[i].c_str(), Y - L[i] + 1); return; } } else { int year = L[E - 1] + Y - 1; printf("%d\n", year); } }