蓝桥小白对c++精度问题以及例题演示蓝桥省赛成绩分析和时间显示

在做题的时候总会遇见向上取整或者向下取整或者是四舍五入,这个时候的精度问题,有时候还需要前导自己加0

在做的时候会遇见很多的问题,有时候直接使用函数比如说floor(向下取整)ceil(向上取整)round(四舍五入)

直接使用有时候会达到自己想要的结果,但是有时候也会出错。最近一天做了精度问题的题,也遇见一些问题,我把我遇见的问题说出来。

并且把解决方法也说出来,可能还不够完善,后续有新的会补充。

比如说%这个符号非常的眼熟吧,但是这个符号只能用于整数,如果用于浮点数会导致编译错误。这点是小白不清楚的,我也是今天才知道这点的

然后如果要处理浮点数,如果只有2位数,我们可以使用fomd函数来解决。类型要一致。

下面例子演示,记住只能是2位数多了也会出错

#include <iostream>
#include <cmath>
using namespace std;
int main() {
  double num = 10.5;
  double divisor = 3.2;
  double remainder = fmod(num, divisor);
  cout << "余数:" << remainder << endl;
  return 0;
}

还有一个点,也是让我眼前一亮

我们在打印有多少位数的时候不是使用的下面这个代码吗???

cout<<fixed<<setprecision(位数)<<打印的数;

但是这个还可以做到四舍五入,这点是非常让我感觉到不可思议的地方,还可以做到前导0的打印出来,非常的好。个人感觉哈。

下面来看看例子

#include <bits/stdc++.h>
using namespace std;
int main(){
  int n;
  cin>>n;
  double max1=0.00;
  double ans=0.00;
  double min1=1000.00;
  for(int i=1;i<=n;++i){
    double num=0.00;
    cin>>num;
    if(num>max1){
      max1=num;
    }
    if(num<min1){
      min1=num;
    }
    ans+=num;
  }
  // ans=round(ans/n*100);
  ans=ans/n*100;
  ans/=100;
  cout<<max1<<'\n';
  cout<<min1<<'\n';
  //cout<<fixed<<setprecision(2)<<ans;
  cout<<fixed<<setprecision(2)<<ans;//<<"."<<ans/100;
  return 0;
}

下面代码没有问题了,但是遇见前导0的时候就不能够正确的打印了,所以只能过样例的80%

但是经过修改过后就可以过100%

我们在确定精度的时候也可以先乘以相应的数比如说100,然后在后面除掉,这样也可以保存到我们想要的精度。这点也是运用的非常多的地方。

下面在来一道题演示  蓝桥 2021 省赛

在演示之前,告诉大家一个知识点,setw(数字)表示打印的宽度,然后setfill('0')表示填充字符0,这点在打印不足以2位的时候会补充0

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
    double n;
    cin >> n;
    double sum = n / 1000.0; // 转换成秒
    // 输出小时部分
    cout << fixed << setprecision(2) << setw(2) << setfill('0') << (int)(sum / 3600.0) % 24 << ":";
    // 输出分钟部分
    cout << setw(2) << setfill('0') << (int)(sum / 60.0) % 60 << ":";
    // 输出秒部分
    cout << setw(2) << setfill('0') << (int)sum % 60;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值