请问我错哪了

B2046 骑车与走路

PengPeng2 @ 2024-08-27 15:11:11

#include <bits/stdc++.h>
using namespace std;

int main(){
    long double jv,bike_s,walk_s;
    cin>>jv;
    bike_s = jv / 3.0 + 50;
    walk_s = jv / 1.2;
    if(bike_s < walk_s){
        cout<< "Bike" << endl;
    }else if (bike_s > walk_s ){
        cout << "Walk" << endl;
    }else{
        cout << "All"<< endl;
    }
    return 0;
}

by XYY62012 @ 2024-08-27 15:18:33

@PengPeng2 把 long double 改成 double


by luogu_00 @ 2024-08-29 11:17:34

#include<bits/stdc++.h>
using namespace std;
int main(){
    long double llf=1.0/3.0;
    cout<<fixed<<setprecision(20)<<llf;
    return 0;
}

的输出是0.33333333333333333333

#include<bits/stdc++.h>
using namespace std;
int main(){
    double lf=1.0/3.0;
    cout<<fixed<<setprecision(20)<<lf;
    return 0;
}

的输出是0.33333333333333331483
大家可以自己用C++运行一下试试。


by chenzhishuo2012 @ 2024-09-03 07:33:26

大哥,用double会有精度误差,还有一些是浮点数类型的函数,比如:pow(),ceil(),floor()等等,在使用这些函数时需要注意,如果是一个没有超过定义范围的浮点数中较大的数,就会出现精度误差,可以采用别的方法,进行运算。


by chenzhishuo2012 @ 2024-09-03 07:33:42

#include<bits/stdc++.h>
using namespace std;
int a;
int main(){
    cin>>a;
    if(1.0*a/1.2>50+1.0*a/3.0)cout<<"Bike"<<endl;
    else if(1.0*a/1.2<50+1.0*a/3.0)cout<<"Walk"<<endl;
    else cout<<"All"<<endl;
    return 0;
}

|