问题分析
本题数据量很大,需要考虑到路程由行驶速度与时间乘积得到
时间和速度的上限均为10^9,那么得到的数据大小很可能特别大,因此此处应考虑到出现爆int的现象
代码如下:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
long long s,t;
cin>>s>>t;
cout<<fixed<<setprecision(3)<<s*t/12.0<<endl;
return 0;
}
总结:
采用setprecision实现数据精度的控制
因为数据很大,防止数据溢出,采用long long
我是用强制类型转换成double,请问从数据量和数据精度角度考虑,有问题嘛?虽然做法AC了,但是我看大家都用long long,想知道一下。
我也一样~同问!
我遇到的数据才不过几百万,可结果就是错!可是int的取值范围不是-2^31~2^31么?我后来改成long long就没事了(仅仅改了S和T的变量类型)
就很奇怪啊……无语
因为s×t的最大结果为10^14,这个值是会大于2^31,比较方法:对这两个数分别取对数,化简,左边是14×ln10≈32.23,右边是31×ln2≈21.48 ,所以10^14>2^31。
所以s×t的结果有可能超出int类型的数据范围,此时得出的结果一定是错误的。所以要开long long。