|
|
@@ -1,54 +0,0 @@
|
|
1
|
|
-use std::fmt;
|
|
2
|
|
-
|
|
3
|
|
-struct Roman(String);
|
|
4
|
|
-
|
|
5
|
|
-impl fmt::Display for Roman {
|
|
6
|
|
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
7
|
|
- write!(f, "{}", self.0)
|
|
8
|
|
- }
|
|
9
|
|
-}
|
|
10
|
|
-
|
|
11
|
|
-impl From<i32> for Roman {
|
|
12
|
|
- fn from(arabic_number: i32) -> Self {
|
|
13
|
|
- let stages = vec![1000, 500, 100, 50, 10, 7, 6, 5, 4, 3, 2, 1];
|
|
14
|
|
- let mut an = arabic_number;
|
|
15
|
|
- let mut value = String::new();
|
|
16
|
|
- for s in stages {
|
|
17
|
|
- while an >= s{
|
|
18
|
|
- value.push_str(&Roman::to_roman(s));
|
|
19
|
|
- an -= s;
|
|
20
|
|
- }
|
|
21
|
|
- }
|
|
22
|
|
- Roman::new(value)
|
|
23
|
|
- }
|
|
24
|
|
-}
|
|
25
|
|
-
|
|
26
|
|
-impl Roman {
|
|
27
|
|
- fn to_roman(number:i32) -> String {
|
|
28
|
|
- match number {
|
|
29
|
|
- 1 => "I",
|
|
30
|
|
- 2 => "II",
|
|
31
|
|
- 3 => "III",
|
|
32
|
|
- 4 => "IV",
|
|
33
|
|
- 5 => "V",
|
|
34
|
|
- 6 => "VI",
|
|
35
|
|
- 7 => "VII",
|
|
36
|
|
- 10 => "X",
|
|
37
|
|
- 50 => "L",
|
|
38
|
|
- 100 => "C",
|
|
39
|
|
- 500 => "D",
|
|
40
|
|
- 1000 => "M",
|
|
41
|
|
- _ => "",
|
|
42
|
|
- }.to_string()
|
|
43
|
|
- }
|
|
44
|
|
-
|
|
45
|
|
- fn new(string: String) -> Self {
|
|
46
|
|
- Roman(string)
|
|
47
|
|
- }
|
|
48
|
|
-}
|
|
49
|
|
-
|
|
50
|
|
-
|
|
51
|
|
-fn main() {
|
|
52
|
|
- println!("Hello, world!");
|
|
53
|
|
- println!("{} into {}", 2012, Roman::from(2012));
|
|
54
|
|
-}
|