[R48A]四舍五入

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 数学

对于 100%100\% 的数据,1≤n≤1091 \le n \le 10^9。

思路

设 g=n mod 10g = n \bmod 10 为 nn 的个位数字。

  • 若 g≤4g \le 4,直接将个位变为 00,即 n−gn - g;
  • 若 g≥5g \ge 5,向十位进一并将个位变为 00,即 n−g+10n - g + 10。

两种情况可统一为一个表达式。注意到给 nn 加上 55 后再整除 1010 取整,恰好实现「个位四舍五入到十位」的效果:

ans=⌊n+510⌋×10\text{ans} = \left\lfloor \frac{n + 5}{10} \right\rfloor \times 10

验证边界:

  • n=14n = 14:(14+5)/10×10=1×10=10(14 + 5) / 10 \times 10 = 1 \times 10 = 10,正确;
  • n=15n = 15:(15+5)/10×10=2×10=20(15 + 5) / 10 \times 10 = 2 \times 10 = 20,正确。

由于 n≤109n \le 10^9,n+5n + 5 不会溢出 Int64,可直接用整数运算一步求得答案。

复杂度

  • 时间复杂度:O(1)O(1)。
  • 空间复杂度:O(1)O(1)。

仓颉实现

查看仓颉实现
import std.convert.*
import std.env.*

main() {
    let reader = getStdIn()
    let n = Int64.parse(reader.readln().getOrThrow())
    println(((n + 5) / 10) * 10)
}