Это мой алгоритм для преобразования секунд в секунды, минуты и часы (только с использованием общего количества секунд и отношения между каждым из них):
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2
И вот мое объяснение этого:
Время теста в секундах:
ЧЧ: ММ: СС = 02:20:10 => общее количество секунд = 2 * 3600 + 20 * 60 + 10 = 7200 + 1200 + 10 = 8410
База между секундами -> минутами и минутами -> часами - 60 (из секунд -> часов - 60 ^ 2 = 3600).
int totalSeconds = 8410
const int BaseSMH = 60
Каждую единицу (здесь представленную переменной) можно рассчитать, удалив предыдущую единицу (выраженную в секундах) из общего количества секунд и разделив ее на отношение между секундами и единицей, которую мы пытаемся вычислить. Вот как выглядит каждый расчет с использованием этого алгоритма:
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - S) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - S - M * BaseSMH) / BaseSMH ^ 2
Как и во всей математике, теперь мы можем заменить каждую единицу в вычислениях минут и часов на то, как мы вычислили предыдущую единицу, и каждый расчет будет выглядеть следующим образом (помните, что деление с BaseSMH в вычислении M и умножение на BaseSMH в H вычисление отменяет друг друга):
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2
Тестирование с "totalSeconds" и "BaseSMH" сверху будет выглядеть так:
int S = 8410 % 60
int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60
int H = (8410 - 8410 % 60 - ((8410 - 8410 % 60) % 60 ^ 2)) / 60 ^ 2
Расчет S:
int S = 8410 % 60 = 10
Расчет М:
int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60
= ((8410 - 10) % 3600) / 60
= (8400 % 3600) / 60
= 1200 / 60
= 20
Расчет H:
int H = (8410 - 8410 % 60 - ((8410 - 8410 % 60) % 60 ^ 2)) / 60 ^ 2
= (8410 - 10 - ((8410 - 10) % 3600)) / 3600
= (8400 - (8400 % 3600)) / 3600
= (8400 - 1200) / 3600
= 7200 / 3600
= 2
При этом вы можете добавить любую единицу измерения, которую хотите, вам просто нужно вычислить соотношение между секундами и единицей, которую вы хотите. Надеюсь, вы понимаете мои объяснения каждого шага. Если нет, просто спросите, и я могу объяснить дальше.