Неправильный ответ при перемножении в 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