Namaran

Code daily. Without assist.

2026-09-19

format_hms.cpp

#include <string>

std::string format_hms(int total_seconds) {
    // write this: format total_seconds as "H:MM:SS" (hours unpadded,
    // minutes and seconds zero-padded to 2 digits), using / and % only
}

format_hmsを実装してください。/%を鎖のように使い、まず時間を取り出し、残りから分、その残りから秒を取り出すこと。

Reference
std::string format_hms(int total_seconds) {
    int hours = total_seconds / 3600;
    int rem = total_seconds % 3600;
    int minutes = rem / 60;
    int seconds = rem % 60;
    std::string result = std::to_string(hours) + ":";
    if (minutes < 10) result += "0";
    result += std::to_string(minutes) + ":";
    if (seconds < 10) result += "0";
    result += std::to_string(seconds);
    return result;
}

「合計を単位ごとに分解する」処理は、/で1つ上の単位の個数を取り出し、%でその単位に収まりきらなかった残りを次の計算に渡す、という鎖でできています。total_seconds / 3600で時間数を取り出したら、その時間ぶんを引いた残りはtotal_seconds % 3600そのものであり、改めて引き算する必要はありません。この残りに対して同じ手順(/ 60で分、% 60で秒)を繰り返すだけで、単位変換の連鎖が書けます。これは参考実装であり、唯一の正解ではありません。