pyhaya’s diary

機械学習系の記事をメインで書きます

ABC012 B 入浴時間 を解いた

今回は、AtCoder Beginners Contest 012 のB問題を解きましたのでまとめておきます。この問題は特別アルゴリズム等が必要なわけではなく、難しくもないのですが、ゼロ埋めが必要で、私がこれをよく忘れるので、備忘録的な感じで書きました。
beta.atcoder.jp

問題文

問題は下のようになっています。

高橋君は、お風呂で湯船に浸かった秒数を数える習慣があります。
今日は、高橋君は湯船でN秒まで数えました。
しかし、秒だと解りにくいので、何時間何分何秒、という形に直したいです。
秒数Nが与えられるので、hh:mm:ss の形式に変換しなさい。

入力は以下の形式で標準入力から与えられる。

N

1行目には、高橋君が湯船に浸かった秒数を表す整数N(0≦N≦86399)が与えられる。

出力
高橋君が湯船に浸かっていた時間を、hh:mm:ssの形式で、1行で出力せよ。出力の末尾には改行をいれること。

解答

算数的な感じです。まず時間から求めて、次に分、秒と求めていけばよいです。解答はゼロ埋め出ないとだめなので、iosiomanipをインクルードしておきます。

#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桁になります。