とあるオンラインジャッジでやった問題。
秒単位で与えられる時間を、時・分・秒に切り分けるようなコードを書く。
たとえば、入力として3680
を与えると、1:1:20
を出力する。
この出力はもちろんh:m:s
の形である。
私が書いたコード
# include <cstdio>
int main(){
int in; //入力
int h=0; //時
int m=0; //分
int s=0; //秒
scanf("%d",&in);
while(in>=3600){ //時を決定
in -= 3600;
h++;
}
while(in>=60){ //分を決定
in -= 60;
m++;
}
s = in; //余りが秒
printf("%d:%d:%d\n",h,m,s);
}
入力in
から、3600秒(=1時間)を引けるだけ引く。引いた回数だけh
をインクリメント。
次にin
から60秒(=1分)を引けるだけ引く。引いた回数だけm
をインクリメント。
最後に、in
をs
に代入。
より良いコード
他の人の回答を見ていたらこんなのがあった。
(丸写しはまずいので一応自分なりに書き直した)
# include <cstdio>
int main(){
int in;
int h,m,s;
scanf("%d",&in);
h = in / 3600;
in %= 3600;
m = in / 60;
in %= 60;
s = in;
printf("%d:%d:%d\n",h,m,s);
}
整数同士の割り算が整数を返すことをうまく利用している。
剰余代入演算子なんてすっかり忘れていた。
感想
この問題で割り算を使うのって、小中学生でも思いつくんでなかろうか。これを思いつけないあたり頭が固くなってるなあ。