こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
実装
以下のように実装しました。
use proconio::input;
fn to_vec(n: u16) -> Vec<u8> {
let mut num = n.clone();
let mut r: Vec<u8> = vec![];
while num > 0 {
r.push((num % 10) as u8);
num = num / 10;
}
r
}
fn main() {
input! {
n: u16,
a: u8,
b: u8,
};
let mut sum = 0;
for i in 1..=n {
let s = to_vec(i).into_iter().sum();
if a <= s && s <= b {
sum += i;
}
}
println!("{sum}");
}
しかし、なぜかこれだとWAになりました。なぜ?
少しスリムにした実装もしてみましたが、これもWAに、、、
use proconio::input;
fn main() {
input! {
n: u16,
a: u16,
b: u16,
};
let mut sum = 0;
for i in 1..=n {
let mut s = 0;
let mut t = i;
while t > 0 {
s += t % 10;
t /= 10;
}
if a <= s && s <= b {
sum += i;
}
}
println!("{sum}");
}
inputマクロで取得している型をu32に変更したら通りました。
use proconio::input;
fn main() {
input! {
n: u32,
a: u32,
b: u32,
};
let mut sum = 0;
for i in 1..=n {
let mut s = 0;
let mut t = i;
while t > 0 {
s += t % 10;
t /= 10;
}
if a <= s && s <= b {
sum += i;
}
}
println!("{sum}");
}
なんでだろう、、、と思ったんですが、今回sumに入りうる最大値は約5000万。
それを考えるとオーバーフローしてしまっていたんでしょうね。
ということで今回はこれで👍