こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

ABC083B - Some Sums

実装

以下のように実装しました。

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万。

それを考えるとオーバーフローしてしまっていたんでしょうね。

ということで今回はこれで👍