B4258 [GESP202503 一级] 四舍五入

· · 题解

欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。

:::align{center} :::

本题考察循环结构。

根据题目意思,我们要看一个数的个位数。如果个位数是 0, 1, 2, 3, 4(这些数字比较小,小于 5),我们就把个位数“舍去”,让它变成 0。如果个位数是 5, 6, 7, 8, 9(这些数字比较大,大于等于 5),我们就要“进位”。意思是,我们把个位数变成 0,然后让十位数增加 1。这叫做“五入”。比如:

因此,我们使用循环结构读入 n 个数。对于每一个读入的数 x,首先先需要获取它的个位数。一个数除以 10 的余数,就是它的个位数。因此可以使用 x % 10 得到结果。

接着,我们判断个位数,如果个位数小于 5,那么,四舍五入后的数就是原来的数减去它的个位数。否则,如果个位数大于等于 5,那么,四舍五入后的数就是原来的数减去它的个位数,然后再加 10。(这就相当于把个位变成 0,十位加 1)。

int gewei = a % 10; // 计算个位数
if (gewei < 5) {
    // 如果个位数小于 5,“舍去”
    ans = a - gewei;
} else {
    // 如果个位数大于等于 5,“进位”
    ans = a - gewei + 10;
}

拓展思考:如果不想使用分支结构,可以使用 ans = (a + 5) / 10 * 10 做到四舍五入到整十位。想一想,这是为什么呢?