Неправильный ответ при перемножении в C++. Не могу разобраться с типами

Есть задачка про таймер. Где вводится начальное время и приращение в часа минутах секундах. Нужно вывести конечное. Считывание, расчет и вывод я написала. Оно работает на небольших числах. А вот на больших считает не верно. Я понимаю что ошибка где то при перемножение, когда не хватает разрядности, но тип задала long long. Уже совсем запуталась. Вот код

#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;

int main() {
char line[9] = {};
cin.getline(line, 9);

long long int timeFirst = 0;
timeFirst += atoi(strtok(line, ":")) * 60 * 60;
timeFirst += atoi(strtok(NULL, ":")) * 60;
timeFirst += atoi(strtok(NULL, ":"));

char lineTwo[100001] = {};
cin.getline(lineTwo, 100001);

char* nums[3] = {};
int numsCount = 0;

char* token = strtok(lineTwo, ":");
while (token != NULL) {
    nums[numsCount] = token;
    ++numsCount;

    token = strtok(NULL, ":");
}

long long int timeSecond = 0;
switch (numsCount) {
case 1:
    timeSecond += atoi(nums[0]);
    break;
case 2:
    timeSecond += atoi(nums[0]) * 60;
    timeSecond += atoi(nums[1]);
    break;
case 3:
    timeSecond += atoi(nums[0]) * 60 * 60;
    timeSecond += atoi(nums[1]) * 60;
    timeSecond += atoi(nums[2]);
    break;
}

long long int timeNew = timeFirst + timeSecond;
long long int days = timeNew/(60*60*24);
long long int hours = (timeNew - days*60*60*24)/(60*60);
long long int minuts = (timeNew - (days*60*60*24+hours*60*60))/(60);
long long int seconds = timeNew - (days*60*60*24+hours*60*60 + minuts*60);

string s;
if (hours >9)
  s = to_string(hours);
 else s = "0" + to_string(hours);
if (minuts >9)
  s += ":"+ to_string(minuts);
 else s += ":0" + to_string(minuts);
if (seconds >9)
  s += ":"+ to_string(seconds);
 else s += ":0" + to_string(seconds);
 if (days >0)
  s += "+"+ to_string(days) + " days";

 cout << s;

return 0;
}

проблема в куске. Не работает умножение и суммирование.

  long long int timeSecond = 0;
switch (numsCount) {
case 1:
    timeSecond += atoi(nums[0]);
    break;
case 2:
    timeSecond += atoi(nums[0]) * 60;
    timeSecond += atoi(nums[1]);
    break;
case 3:
    timeSecond += atoi(nums[0]) * 60 * 60;
    timeSecond += atoi(nums[1]) * 60;
    timeSecond += atoi(nums[2]);
    break;
}

long long int timeNew = timeFirst + timeSecond;
long long int days = timeNew/(60*60*24);
long long int hours = (timeNew - days*60*60*24)/(60*60);
long long int minuts = (timeNew - (days*60*60*24+hours*60*60))/(60);
long long int seconds = timeNew - (days*60*60*24+hours*60*60 + minuts*60);

Например такой тест 19:11:28 805019366:716955435:868889685


Ответы (0 шт):