关于#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 
#include 
#include 
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/////

基于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);  // 四舍五入保留两位小数
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632