【例14.2】 四舍六入五留双
按银行家舍入法保留 d 位小数
正文
// 原题:https://oj.yecheng.tv/p/P74
// 题意:保留 d 位小数,恰为 0.5 时向偶数舍入
// (如 0.5→0、1.5→2、2.5→2),否则四舍六入。
// f 最多 30 位小数,必须用字符串处理。
// 思路:截取第 d+1 位起的尾数:
// 大于 0.5 进位、小于 0.5 舍去、
// 恰好 0.5 看保留末位奇偶,最后处理进位。
#include <iostream>
using namespace std;
int main() {
string s;
int d;
cin >> s >> d;
// 拆出整数部分和小数部分
string intPart = "0", frac;
int dot = s.find('.');
if (dot == -1) intPart = s;
else {
intPart = s.substr(0, dot);
frac = s.substr(dot + 1);
}
// 补齐到 d+1 位,便于统一比较
while ((int)frac.size() < d + 1) frac += '0';
string rest = frac.substr(d);
// rest 与 0.5 比较:首位大于 5 或等于 5 后还有非零 → 超过一半
bool overHalf = rest[0] > '5';
bool halfExactly = rest[0] == '5';
if (halfExactly) {
for (int i = 1; i < (int)rest.size(); i++) {
if (rest[i] != '0') { halfExactly = false; overHalf = true; break; }
}
}
bool up = overHalf || (halfExactly && (frac[d - 1] - '0') % 2 == 1);
if (up) {
// 从第 d 位往前进位
int i = d - 1;
while (i >= 0 && frac[i] == '9') frac[i--] = '0';
if (i >= 0) frac[i]++;
else {
// 整数部分进位
int j = (int)intPart.size() - 1;
while (j >= 0 && intPart[j] == '9') intPart[j--] = '0';
if (j >= 0) intPart[j]++;
else intPart = "1" + intPart;
}
}
cout << intPart << "." << frac.substr(0, d) << endl;
return 0;
}
C++语法 · 顺序结构的其它内容
- 【例2.1】Hello World
- 【例2.2】你好世界
- 练2.1 春节快乐
- 练2.2 单句春晓
- 【例3.1】 输出表达式的值
- 【例3.2】 打印长方形
- 练3.1 唐诗春晓
- 练3.2 雪花
- 练3.3 01子串
- 【例4.1】 交换两个数的位置
- 【例4.2】 天安门广场的面积
- 练4.1 阿布拉1
- 练4.2 列朋波骨
- 练4.3 3个连续数
- 练4.4 牛吃牧草
- 【例5.1】量身高
- 【例5.2】输出第二个整数
- 练5.1 复读机
- 练5.2 阿布拉2
- 练5.3 电影票
- 【例6.1】 比赛成绩
- 【例6.2】捡石头
- 【例6.3】 套盒子
- 练6.1 植树造林
- 练6.2 兴趣小组
- 练6.3 整数的和
- 【例7.1】保留3位小数
- 【例7.2】与圆相关的计算
- 练7.1 埃及金字塔
- 练7.2 保留12位小数
- 练7.3买图书
- 练7.4梯形面积
- 【例8.1】人民币支付
- 【例8.2】成绩
- 【例8.3】计算球的体积
- 练8.1 尼克与强盗
- 练8.2 完成习题
- 练8.3 计算分数的浮点数值
- 练8.4带余除法
- 练8.5 幸运数
- 【例9.1】输出字符三角形
- 【例9.2】打印字符
- 【例9.3】小写字母转大写字母
- 练9.1 字符菱形
- 练9.2 打印ASCII码
- 练9.3 加四密码
- 【例10.1】机票打折
- 【例10.2】分钱游戏
- 练10.1 细胞分裂
- 练10.2 浮点数向零舍入
- 练10.3 计算浮点数相除的余
- 【例11.1】鸡兔同笼
- 【例11.2】数字对调
- 练11.1温度表达转化
- 练11.2 间隔输出
- 练11.3 等差数列末项计算
- 练11.4计算(a+b)×c的值
- 练11.5计算(a+b)/c的值
- 【例12.1】浮点型数据类型存储空间大小
- 【例12.2】长方体表面积