RustでProject Euler (6)

Problem 4

https://projecteuler.net/problem=4

PriorityQueueを使うと速いのですが、ここでは、3桁同士の掛け算を全て配列に入れて、降順に並べて、palindromeを探します。

Vec

VecはC++のstd::vectorに相当するものです。

空の配列を作って、

let mut a: Vec<i32> = Vec::new();

追加します。

a.push(i*j);

次のようにソートすると、

a.sort()

比較関数を使うと、降順にもソートできます。

a.sort_by(|a, b| b.cmp(a));
use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    let e: u32 = args[1].parse().unwrap();
    let mut a: Vec<i32> = Vec::new();
    for i in 10i32.pow(e-1)..10i32.pow(e) {
        for j in 10i32.pow(e-1)..(10i32.pow(e)) {
            a.push(i*j);
        }
    }
    a.sort_by(|a, b| b.cmp(a));
    for n in a {
        if is_palindromic(n) {
            println!("{}", n);
            break;
        }
    }
}

fn is_palindromic(n: i32) -> bool {
    return n == reverse_number(n);
}

fn reverse_number(n: i32) -> i32 {
    let mut s = 0;
    let mut m = n;
    while m > 0 {
        let d = m%10;
        m = m/10;
        s = s*10 + d;
    }
    return s;
}