ABC012 B 入浴時間 を解いた
今回は、AtCoder Beginners Contest 012 のB問題を解きましたのでまとめておきます。この問題は特別アルゴリズム等が必要なわけではなく、難しくもないのですが、ゼロ埋めが必要で、私がこれをよく忘れるので、備忘録的な感じで書きました。
beta.atcoder.jp
問題文
問題は下のようになっています。
高橋君は、お風呂で湯船に浸かった秒数を数える習慣があります。
今日は、高橋君は湯船でN秒まで数えました。
しかし、秒だと解りにくいので、何時間何分何秒、という形に直したいです。
秒数Nが与えられるので、hh:mm:ss の形式に変換しなさい。入力は以下の形式で標準入力から与えられる。
N1行目には、高橋君が湯船に浸かった秒数を表す整数N(0≦N≦86399)が与えられる。
出力
高橋君が湯船に浸かっていた時間を、hh:mm:ssの形式で、1行で出力せよ。出力の末尾には改行をいれること。
解答
算数的な感じです。まず時間から求めて、次に分、秒と求めていけばよいです。解答はゼロ埋め出ないとだめなので、ios
とiomanip
をインクルードしておきます。
#include <iostream> #include <ios> #include <iomanip> using namespace std; int main() { int n; cin >> n; int hour, min, sec; hour = n / 3600; n -= hour * 3600; min = n / 60; n -= min * 60; sec = n; cout << setfill('0') << right << setw(2) << hour << ":"; cout << setfill('0') << right << setw(2) << min << ":"; cout << setfill('0') << right << setw(2) << sec << endl; }
一応解説をしておくと、setfill
で何で埋めるか(今回は0)を指定していて、表示するものを左右どちらに寄せるかを指定しているのが次のright
の部分、そして埋めた後に最終的に何文字にするのかを指定しているのがsetw
になります。なのでsetw(4)
としたときには、hour=3
の時、表示は「0003」と4桁になります。