summaryrefslogtreecommitdiff
path: root/rust/src/bin/p0013.rs
blob: b5f8a620156ac5fb121f86b70a008f7348262d4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
impl Solution {
    fn char_to_int(c: char) -> i32 {
        match c {
            'I' => 1,
            'V' => 5,
            'X' => 10,
            'L' => 50,
            'C' => 100,
            'D' => 500,
            'M' => 1000,
            _ => 0,
        }
    }
    pub fn roman_to_int(s: String) -> i32 {
        let mut sum = 0;
        for i in 0..s.len() {
            if i < s.len() - 1 {
                if Self::char_to_int(s.as_bytes()[i as usize] as char)
                        < Self::char_to_int(s.as_bytes()[i+1 as usize] as char) {
                    sum = sum - Self::char_to_int(s.as_bytes()[i as usize] as char);
                    continue;
                }
            }
            sum = sum + Self::char_to_int(s.as_bytes()[i as usize] as char);
        }
        sum
    }
}

struct Solution {}
fn main() {
    println!("{}", Solution::roman_to_int("MCMXCIV".to_string()));
}