[R39A]三十九
数据规模:。
思路
一个数是好的,当且仅当它的每一个数位都是 的倍数,即每位只能取 (正整数不含前导 ,自然满足首位非零)。
数据规模极小,直接枚举 到 的每个正整数,对每个数反复取最低位 ,判断 是否始终成立,全部成立则计入答案即可。
样例 :好数共有 这 个,与样例一致。
复杂度
- 时间:,每位检查 位, 完全可行。
- 空间:。
仓颉实现
import std.convert.*
import std.env.*
func isGood(x: Int64): Bool {
var v = x
while (v > 0) {
if (v % 10 % 3 != 0) {
return false
}
v /= 10
}
return true
}
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
var ans = 0
for (i in 1..=n) {
if (isGood(i)) {
ans++
}
}
println(ans)
return 0
}
要点:
- 用 判断单次数位,能同时覆盖 四种合法取值。
- 区间
1..=n为左闭右闭,枚举所有不超过 的正整数,无需单独处理边界。