4.12 G
题目意思为输出一个三位小数,小数部分四舍五入后的误差总和,数据1e18
显然开longlong没法照顾到小数部分,long double没法到1e18
想一下会发现其实整数部分是没有用的,所以我们不妨直接把整数部分当作字符串读入,小数点后的部分直接当作整数用就好啦。
这样要注意,小数部分直接用的话,相当于把数值扩大了1000倍。最后要除以1000.
#include <algorithm> #include <iostream> #include <cstdio> using namespace std; #define d double #define LL long long int n,f1,f2,ans; LL a[100005]; int main() { while(scanf("%d",&n)!=EOF) { ans=0; char c; for(int i=1;i<=n;i++) { while(cin>>c) { if(c=='.')break; } scanf("%d",&a[i]); int b; if(a[i]%10>=5)b=a[i]+(10-(a[i]%10)); else b=a[i]-(a[i]%10); ans=ans+(b-a[i]); } printf("%.3lf\n",d(ans)/1000); } }
除特别注明外,本站所有文章均为Manjusaka丶梦寒原创,转载请注明来自出处