题目描述
两辆汽车在同一地点,同时,沿同一方向前进。
一辆车的速度为 60 km/h,另一辆车的速度为 90 km/h
显然,快车与慢车的距离会不断拉开,每过一个小时(60分钟),两车的距离就拉开 30 公里。
现在,告诉你两车之间的距离为 L 公里,请你求出两车已经行驶了多长时间?
算法1
L / 30 * 60,由于L/30若非整除,则会直接保留整数部分,精度出现问题;
这里我尝试用强制类型转换:(double)L/30 * 60
但结果会自动变成科学计数法的形式,如:1.19387e+09 minutos 标准答案:1193866064 minutos
要把科学计数法变为普通数字就比较麻烦了,下面是找到的转换代码:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
double scientificToDecimal(string s) {
int eIndex = s.find("E");
double base = stod(s.substr(0, eIndex)); //获取小数部分
int exp = stoi(s.substr(eIndex + 1)); //获取指数部分
return base * pow(10, exp);
}
int main() {
string s1 = "1.23E+5";
string s2 = "1.23E-5";
cout << scientificToDecimal(s1) << endl; //123000
cout << scientificToDecimal(s2) << endl; //0.0000123
return 0;
}
到这里我就快速放弃打开题解了orz,我感觉这题没这么复杂hhhh,果然有其他简便方法
感兴趣的小伙伴可以试试转换
算法2
快车与慢车拉开的距离的速度为0.5km/min(推导:90/60 - 60/60 = 0.5km/min)
行驶时间X=L/0.5,即X=L*2
#include<iostream>
using namespace std;
int main()
{
long long L;
cin>>L;
cout<<L*2<<" minutos"<<endl;
//也可以使用位运算<<1,向左移一位等于原数除以2
//cout<<(L<<1)<<" minutos"<<endl;
return 0;
}
(或者使用L/30.0*60,但结果也是科学计数法的形式)