[R10B] 平方数
- 难度 入门
- 时限 1s
- 空限 512m
- 二分数学
数据规模:。
思路
中最大的平方数是 。直接用浮点 sqrt 求 在 接近 时可能因精度误差算错,因此用整数二分求出满足 的最大 ,答案即为 。二分上界取 (), 不超过 ,不会溢出 Int64。
复杂度:时间 ,空间 。
仓颉实现
import std.convert.*
import std.env.*
main() {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
var lo: Int64 = 0
var hi: Int64 = 1000000000
while (lo < hi) {
let mid = (lo + hi + 1) / 2
if (mid * mid <= n) {
lo = mid
} else {
hi = mid - 1
}
}
println(lo * lo)
}