Presta atención porque en esta noticia vas a hallar el resultado que buscas.
Solución:
Pruebe esto en su lugar, probado y funciona:
int seconds, hours, minutes;
cin >> seconds;
minutes = seconds / 60;
hours = minutes / 60;
cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << int(minutes%60)
<< " minutes " << int(seconds%60) << " seconds.";
Como los minutos son segundos/60, dividirlo por 60 nuevamente es equivalente a sumergir los segundos por 3600, por eso funciona.
seconds/3600
es división entera, por lo que para seconds < 3600
, hours
es 0
entonces cosas como seconds%(hours*3600)
se convierte seconds % 0
provocando una división por cero.
Primero hagamos bien la lógica. Supongamos que quieres escribir 5000 seconds
como x
horas y
minutos z
segundos, tales que los tres son enteros y ninguno y
ni z
es mayor que 59. ¿Qué haces?
Bueno, primero puedes escribirlo como q
minutos z
segundos, tal que ambos son enteros y z
no es mayor que 59. Eso es fácil:
q = 5000 / 60 = 83 // integer division
z = 5000 % 60 = 20
Entonces 5000 segundos son 83 minutos 20 segundos. ahora como se escribe 83 minutes
dentro x
horas y
minutos, tal que ambos son enteros y y
no es mayor que 59? Haces lo mismo:
x = 83 / 60 = 1
y = 83 % 60 = 23
Bien, generalicemos esto:
int total, seconds, hours, minutes;
cin >> total;
minutes = total / 60;
seconds = total % 60;
hours = minutes / 60;
minutes = minutes % 60;
cout << total << " seconds is equivalent to " << hours << " hours " << minutes
<< " minutes " << seconds << " seconds.n" ;
Tienes un problema de dividir por cero aquí:
seconds % (hours*60);
hours
es 0 en virtud de la división de enteros.
hours = seconds/3600;
Por lo que está tratando de hacer, debe considerar la lógica condicional para imprimir los minutos si la cantidad total de segundos es mayor que 3600. También querrá investigar una lógica similar en la siguiente parte de su flujo de impresión.
Mi C++ está oxidado, así que perdona si no lo está. exactamente sintaxis válida:
cout << (seconds > 3600 ? seconds % (hours*60) : seconds) << endl;
Si entiendes que ha sido de provecho este artículo, te agradeceríamos que lo compartas con el resto juniors y nos ayudes a difundir esta información.