西暦を和暦に変換するプログラム
パソコン甲子園2005年度予選問題の問11より。西暦で入力された年月日を和暦表示に変換せよという問題。西暦と和暦の対応表は以下の通り。
元号 | 期間 |
---|---|
明治 | 1868-09-08 〜 1912-07-29 |
大正 | 1912-07-30 〜 1926-12-24 |
昭和 | 1926-12-25 〜 1989-01-07 |
平成 | 1989-01-08 〜 |
条件判断が非常にまんどくさそうな問題なんだけど、この前「年齢の求め方」で紹介した方法を応用したら結構シンプルに書けた。yyyymmdd表記を使うのがポイント。
#include <stdio.h> int main(void) { int y, m, d, t, result; char *nengo[] = { "明治以前", "明治", "大正", "昭和", "平成" }; scanf("%d %d %d", &y, &m, &d); t = y * 10000 + m * 100 + d; if (t < 18680908) { result = 0; } else if (t < 19120730) { result = 1; y -= 1867; } else if (t < 19261225) { result = 2; y -= 1911; } else if (t < 19890108) { result = 3; y -= 1925; } else { result = 4; y -= 1988; } if (result) { printf("%s%d年%d月%d日\n", nengo[result], y, m, d); } else { printf("%s\n", nengo[result]); } return 0; }