#include <cstdio>
#include <iostream>
using namespace std;
int main ()
{
int seconds, hours, minutes;
cin >> seconds;
hours = seconds/3600;
cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << seconds%(hours*60)
<< " minutes " << (seconds%(hours*3600))-((seconds%(hours*60))*60) << " seconds.";
}
出于某种原因,此程序仅适用于3600以上的数字。有谁知道如何解决这个问题?每当我执行低于3600的数字时,屏幕会显示一条来自Windows的消息,说该程序已停止工作。
答案 0 :(得分:14)
试试这个,测试并运作:
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.";
因为分钟是秒/ 60,再将它除以60相当于潜水秒数3600,这就是它起作用的原因。
答案 1 :(得分:10)
seconds/3600
是整数除法,因此对于seconds < 3600
,hours
为0
,seconds%(hours*3600)
之类的内容会变为seconds % 0
,导致除法逐为零。
让我们首先让逻辑正确。假设您要将5000 seconds
写为x
小时y
分钟z
秒,这样所有三个都是整数,y
和z
都不是大于59.你做什么?
好吧,您可以先将其写为q
分钟z
秒,这样两者都是整数,z
不大于59.这很容易:
q = 5000 / 60 = 83 // integer division
z = 5000 % 60 = 20
所以5000秒是83分20秒。现在,您如何将83 minutes
写入x
小时y
分钟,这样两者都是整数,y
不超过59?你做同样的事情:
x = 83 / 60 = 1
y = 83 % 60 = 23
好的,让我们概括一下:
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" ;
答案 2 :(得分:2)
你在这里遇到了一个被零除的问题:
seconds % (hours*60);
凭借整数除法, hours
为0。
hours = seconds/3600;
根据您尝试做的事情,如果总秒数大于3600,您应该考虑条件逻辑来打印分钟。您还要在下一部分中研究类似的逻辑。你的印刷流。
我的C ++很生疏,如果这不是完全有效的语法,请原谅:
cout << (seconds > 3600 ? seconds % (hours*60) : seconds) << endl;
答案 3 :(得分:1)
使用功能;
#include<iostream>
using namespace std;
int hour(int h)
{
int second;
//second=(h/3600);
if (h>3600)
second=h/3600;
else
second=(h/3600);
return (second);
}
int minute(int m)
{
int second2;
second2=( );
return(second2);
}
int second(int s)
{
int second3;
second3=((s-3600)%60);
return (second3);
}
void main()
{
int convert;
cout<<"please enter seconed to convert it to hour\b";
cin>>convert;
cout<<"hr : min : sec \n";
cout<<hour(convert)<<":"<<minute(convert)<<":"<<second(convert)<<endl;
system("pause");
}
答案 4 :(得分:1)
尝试一下:
int totalSecond;
cin >> totalSecond;
int hour = totalSecond / 3600;
int minute = (totalSecond % 3600) / 60;
int second = totalSecond % 60;
cout << hour << ":" << minute << ":" << second << endl;
假设totalSeconds
是自午夜以来的秒数,并且小于86400
答案 5 :(得分:0)
使用std::chrono::duration_cast
,您可以简单地编写代码(更多选项请参考std::chrono::duration
):
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main() {
int s; std::cin >> s;
seconds sec(s);
std::cout << duration_cast<hours>(sec).count() << ':'
<< duration_cast<minutes>(sec).count() % 60 << ':'
<< sec.count() % 60;
}
答案 6 :(得分:-1)
看看这段代码:
fathers