当前位置:C++技术网 > 精选软件 > C++ Primer Plus 6th 3.7 编程练习题 第4题 秒数到天、小时、分钟和秒的单位换算和显示

C++ Primer Plus 6th 3.7 编程练习题 第4题 秒数到天、小时、分钟和秒的单位换算和显示

更新时间:2019-02-21 10:42:42浏览次数:1+次

C++ Primer Plus编程练习题3.7 第4题  秒数到天、小时、分钟和秒的单位换算和显示

题目:
4. 编写一个程序,要求用户以整数方式输入秒数(使用long 或long long变量存储),然后以天、小时、分钟和秒的方式显示这段时间。使用符号常量来表示每天有多少小时、每小时有多少分钟以及每分钟有多少秒。该程序的输入应与下面类似:
Enter the number of seconds: 31600000
31600000 seconds = 365 days, 17 hours, 46 minutes, 40 seconds

答案:书上无答案。

C++技术网辅导详解解答:
    此题与上一题纬度的单位换算的处理过程刚好相反。
    代码如下:

#include <iostream>
using namespace std;
int main()
{
    const int h = 24;//1天=24小时
    const int m = 60;//1小时=60分钟
    const int s = 60;//1分钟=60秒
    long long seconds;
    cout << "Enter the number of seconds: ";
    cin >> seconds;

    int dd = seconds / h / m / s;
    int hh = (seconds - dd * h*m*s) / m / s;
    int mm = (seconds - dd * h*m*s - hh * m*s) / m;
    int ss = seconds - dd * h*m*s - hh * m*s - mm * s;

    cout << seconds << " seconds = " << dd << " days, " << hh << "  hours, " << mm << " minutes, "<<ss<<"seconds";

    return 0;
}

    这个题的关键在于dd、hh、mm、ss的计算,很容易出现错误。

    基本的思路是:秒数转为天、小时、分钟和秒的时间,我们先从大单位来算,算完之后,再将消耗的秒数减掉,然后用剩余的秒数计算下面的单位。所以先得到天数,然后将天数所消耗的秒数去掉,剩余的去计算小时数,然后再同理计算分钟,最后剩余的就是不足60秒的秒数。
    一个小提示,这种计算是非常有规律的,从代码上我们可以看到规律。我们从扣除秒数的过程中,可以看到应用了多个常量。开始我将h、m、s的顺序没有注意,还弄错了一次数据。然后按照大到小的单位常量来排序,前面三个相乘,后面两个,最后面一个。除数也有三个到后面两个再到最后面一个。这都是规律。我们把握了这个规律,我们很好检查代码是否正确。而不注意顺序随意写的话,大大提高了错误的概率。这也是规范代码的意义所在。