[GESP202606 一级] 交税
2026-08-08 14:57:09
发布于:新疆
42阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int main()
{
double cnt=0.00;
for(int i=1;i<=12;i++)
{
double a;
cin>>a;
if(a>800.00)cnt+=(a-800.00)*0.2;//1
}
printf("%.2lf",cnt);//2
}
//1 20%等于0.2 , 公式: (a−800.0)×0.2=???
//2 printf是C中的输出语句,double类型为%lf,而在%与lf中的2保留两位小数
全部评论 1
AC🐶推荐最优解:
#include <iostream> #include <iomanip> using namespace std; int main() { long long total_cents = 0; // 单位:分(即 0.01 元) for (int i = 0; i < 12; i++) { double x; cin >> x; int x10 = static_cast<int>(x * 10 + 0.5); // 转为十分之一元,+0.5 防止截断误差 if (x10 > 8000) { int excess = x10 - 8000; // 超过 800 元的部分(单位:0.1 元) total_cents += excess * 2; // 税额 = excess * 0.2 = excess * 2 / 10 → 单位:0.01 元 } } // total_cents 是以「分」为单位的整数,直接除以 100.0 得元,保留两位小数 cout << fixed << setprecision(2) << total_cents / 100.0 << endl; }优势
零浮点误差:全程整数运算,结果绝对精确。
符合信奥高可靠性要求:避免任何 double 累加不确定性。
性能不变:仍是 O(1),且整数运算比浮点略快(但此处无感知)。2026-08-08 来自 新疆
0







有帮助,赞一个