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

关于#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 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义