青训营题目之342 充电总时间计算| 豆包MarsCode AI 刷题

125 阅读2分钟

问题描述

小R有n部电脑,每部电脑的电池容量分别为a(a随着电脑的不同而变化)。她可以使用两种不同的充电方式来给电脑充电:

  1. 普通充电:每单位时间为电脑充电x单位的电量。
  2. 闪充:每单位时间为电脑充电4x单位的电量。

现在,所有电脑的电量都为零。小R希望使用闪充给所有电脑充满电,计算她需要的总充电时间。请保留结果的小数点后两位。

具体问题分析

  1. 首先将全部电脑电池容量相加,得出总需要充电容量(用float型来保留)
  2. 在将总需要充电容量除以闪充单位时间电量,则可得出充电需要总时间(输出为字符串类型)

注意事项

单位时间内电脑充电量单位和电池容量单位并不相同,要记得保留小数点后两位。总电量要保留小数,则数据类型不为int型,而是float型,否则用int四舍五入之后再保留小数位数会出现.00的情况,造成错误。并且题设要求的是返回字符串类型,还需要将得出的结果转化为字符串类型。

具体代码分析

  1. 首先利用for循环将所有的电脑电量相加,得出总电量,并用sum来表示所有电脑的总电量
float sum=0;
    for(int i=0;i<n;i++)
    {
        sum+=a[i];
    }
  1. 再将所需要总电量除以闪充单位时间内可以充的电量,则可以得出充电需要的时间,但是使用float来保存充电所需要的时间
float time=sum/(4*x);
  1. 最后保留两位小数,可以用to_string把时间转化为字符串之后,再利用substr函数来对字符串进行截取,最后再将该字符串进行输出,就能够得出结果
string T=to_string(time);
    string b=T.substr(0,4);//注意下标是从0开始的,并且小数点也需要占用一个位置

感悟

题目思路很简单,主要是考察我们对于保留小数位数的应用,用字符串来保留小数位数可以保留任意位数,当然也可以用一些函数来解决这个问题。通过这个题目,让我对于string类的算法有了进一步的了解,也学会从不同数据类型到字符串类型的转化。