D. Vus the Cossack and Numbers

  比较容易想到,对于每个a[i]下取整,然后再把它的小数不和取和,那么求和是正的就需要补正的,求和是负的就需要补充负的。这个题是要注意浮点数运算精度问题,用eps卡下一下精度,eps取1e-8就可以。还有下取整上取整函数取到的数还是浮点数。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=1e5+5;
 4 const double eps=1e-8;
 5 double a[MAXN];
 6 int b[MAXN];
 7 int main()
 8 {
 9     int n;cin>>n;double sum=0;
10     for(int i=1;i<=n;i++)
11     {
12         scanf("%lf",&a[i]);
13         b[i]=floor(a[i]);
14         sum+=a[i]-b[i];
15     }
16     for(int i=1;i<=n;i++)
17     {
18         if(fabs(a[i]-b[i])<eps)
19             printf("%d\n",b[i]);
20         else if(fabs(sum-0)>eps)
21         {
22             if(sum>0) 
23             {
24                 sum--;
25                 printf("%d\n",b[i]+1);
26             }
27             else
28             {
29                 sum++;
30                 printf("%d\n",b[i]-1);
31             }
32         }
33         else printf("%d\n",b[i]);
34     }
35     return 0;    
36  } 

 

转载于:https://www.cnblogs.com/Msmw/p/11113492.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值