四舍五入的小trick
程序员文章站
2023-12-31 16:57:52
...
题意:传送门
题解:分类如果按照上的话就是最朴素的,但是却卡我半天,题意也是强调(一脸苦)得用四舍五入,那么四舍五入的小trick都有哪些呢?首先了解有个函数,但是可能也能直接用,这篇文章这样其实对编程而言也没啥非得纠结,另外一种就是比如直接将四舍五入到整数,那么x=(x*1+0.5)/1.0
,那么四舍五入到几位小数也就有的写了,x=(x*100+0.5)/100.0
就是保留两位小数。
附上代码(直接使用round函数):
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=70;
db stus[N][10];
int n;
db sum;
int main()
{
sc(n);
rep(i,1,n){
rep(j,1,8){
db t;
scanf("%lf",&t);
if(j==2&&stus[i][1]!=2)sum+=t;
stus[i][j]=t;
}
if(stus[i][1]==2)stus[i][9]=0;
else{
stus[i][9]+=round(stus[i][3]*stus[i][4]+stus[i][5]*stus[i][6]+stus[i][7]*stus[i][8]);
}
}
db res=0;
rep(i,1,n){res+=stus[i][9]*(stus[i][2]/sum);}
printf("%.2f\n",res);
return 0;
}
第二种:自己手动四舍五入
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=70;
db stus[N][10];
int n;
db sum;
int main()
{
sc(n);
rep(i,1,n){
rep(j,1,8){
db t;
scanf("%lf",&t);
if(j==2&&stus[i][1]!=2)sum+=t;
stus[i][j]=t;
}
if(stus[i][1]==2)stus[i][9]=0;
else{
for(int k=3;k<=7;k+=2){
stus[i][9]+=stus[i][k]*stus[i][k+1];
}
}
}
db res=0;
rep(i,1,n){
int g=(int)(stus[i][9]*1+0.5)/1.0;
res+=(g*(stus[i][2]/sum));
}
res=(int)(res*100+0.5)/100.0;
printf("%.2f\n",res);
return 0;
}