[R48A]四舍五入

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

对于 100%100\% 的数据,1n1091 \le n \le 10^9

思路

g=nmod10g = n \bmod 10nn 的个位数字。

  • g4g \le 4,直接将个位变为 00,即 ngn - g
  • g5g \ge 5,向十位进一并将个位变为 00,即 ng+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,正确。

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

复杂度

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

仓颉实现

import std.convert.*
import std.env.*

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