陈啊阵 2023-04-20 20:46 采纳率: 100%
浏览 89
已结题

关于#C++函数重载,多重时长转换#的问题,如何解决?

利用函数重载,写三个同名的时长转换的函数 transTime,分别完成以下功能:
1 能够把用浮点数表示的时长(单位为分钟),转换成时分秒。
例如:64.5分钟,转换成1小时4分钟30秒 (秒的计算向上取整)
2 能够把时分秒转换成浮点数表示时长,调用roundn函数四舍五入保留2位小数并返回该时长(单位为分钟)
例如:将1小时4分钟30秒,转换成64.5
3 能够把分秒表示的时长,转换成浮点数,调用roundn函数四舍五入保留2位小数并返回该时长(单位为分钟)
例如:将4分钟30秒,转换成4.5
4 为了更快捷地完成任务,再编写一个四舍五入保留n位小数的函数
int roundn(float f, int n)
例如 调用该函数时 roundn(3.1415, 3) 返回3.142;
测试输入:
12.69
12:5:37
18:49

预期输出:
12.69 mins is 0:12:42
12:05:37 is 725.62 mins
18:49 is 18.82 mins

请补全如下代码


//TransTime 重载
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

//返回四舍五入保留n位小数的结果 
float roundn(float f, int n);
// 此处写TransTime三个重载函数的原型
////////TODO Begin  ////
///////TODO  End//////

int main()
{
    float duration;
    int h, m, s;
    char c;
    //请不要修改主函数中的任何代码
    //测试1  分钟数 转 时:分:秒
    cout << "input mins:\n";
    cin >> duration;
    TransTime(duration, h,m,s);
     cout << duration << " mins is " << h <<":"
         << setw(2) << setfill('0') << m <<":"
         << setw(2) << setfill('0') << s << endl;

    //测试2  时:分:秒 转 分钟数
    cout << "\ninput h:m:s\n";
    cin >> h >>c >> m >> c >>s;
    duration = TransTime(h,m,s);
    cout << h <<":"<< setw(2) << setfill('0') << m <<":"
         << setw(2) << setfill('0') << s << " is " << duration << " mins" << endl;

    //测试3  分:秒 转 分钟数
   cout << "\ninput m:s\n";
    cin >> m >> c >> s;
    duration = TransTime(m,s);
    cout << setw(2) << setfill('0') << m <<":"
         << setw(2) << setfill('0') << s << " is " << duration << " mins" << endl;



}

//此处编写所有函数的实现
////TODO  Begin ////

////TODO  End/////
  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-20 21:31
    关注

    基于Monster 组和GPT的调写:

    img

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    
    // 返回四舍五入保留n位小数的结果
    float roundn(float f, int n)
    {
        float factor = pow(10, n);
        return round(f * factor) / factor;
    }
    
    // 分钟数 转 时:分:秒
    void TransTime(float duration, int& h, int& m, int& s);
    
    // 时:分:秒 转 分钟数
    float TransTime(int h, int m, int s);
    
    // 分:秒 转 分钟数
    float TransTime(int m, int s);
    
    int main()
    {
        float duration;
        int h, m, s;
        char c;
    
        // 测试1  分钟数 转 时:分:秒
        cout << "input mins:\n";
        cin >> duration;
        TransTime(duration, h, m, s);
        cout << duration << " mins is " << h << ":"
            << setw(2) << setfill('0') << m << ":"
            << setw(2) << setfill('0') << s << endl;
    
        // 测试2  时:分:秒 转 分钟数
        cout << "\ninput h:m:s\n";
        cin >> h >> c >> m >> c >> s;
        duration = TransTime(h, m, s);
        cout << h << ":" << setw(2) << setfill('0') << m << ":"
            << setw(2) << setfill('0') << s << " is " << duration << " mins" << endl;
    
        // 测试3  分:秒 转 分钟数
        cout << "\ninput m:s\n";
        cin >> m >> c >> s;
        duration = TransTime(m, s);
        cout << setw(2) << setfill('0') << m << ":"
            << setw(2) << setfill('0') << s << " is " << duration << " mins" << endl;
    
        return 0;
    }
    
    // 分钟数 转 时:分:秒
    void TransTime(float duration, int& h, int& m, int& s)
    {
        int totalSeconds = ceil(duration * 60);  // 向上取整转换为秒数
        h = totalSeconds / 3600;  // 计算小时数
        totalSeconds = totalSeconds % 3600;  // 剩余秒数
        m = totalSeconds / 60;  // 计算分钟数
        s = totalSeconds % 60;  // 计算秒数
    }
    
    // 时:分:秒 转 分钟数
    float TransTime(int h, int m, int s)
    {
        float totalMins = h * 60 + m + s / 60.0;  // 将秒数转换为分钟数
        return roundn(totalMins, 2);  // 四舍五入保留两位小数
    }
    
    // 分:秒 转 分钟数
    float TransTime(int m, int s)
    {
        float totalMins = m + s / 60.0;  // 将秒数转换为分钟数
        return roundn(totalMins, 2);  // 四舍五入保留两位小数
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 nrf52810-c三个a 程序
  • ¥15 lego-loam跑出来的roll误差很大
  • ¥50 求一个半透明没有锯齿的圆角窗体的实现例子
  • ¥15 STM32cubeMX里的FreeRTOS无法释放内存
  • ¥15 CATIA有些零件打开直接单机确定终止
  • ¥15 请问有会的吗,用MATLAB做
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 ARIMA模型时间序列预测用pathon解决
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度