- Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathadd-strings.rs
56 lines (46 loc) · 1.3 KB
/
add-strings.rs
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#![allow(dead_code, unused, unused_variables)]
fnmain(){}
structSolution;
implSolution{
pubfnadd_strings(num1:String,num2:String) -> String{
letmut i = 0u8;// 进制
let(num1, num2) = (num1.as_bytes(), num2.as_bytes());
let(mut i1,mut i2) = (num1.len(), num2.len());
letmut v = vec![0u8; i1.max(i2) + 1];
letmut vindex = v.len() - 1;
loop{
let a = if i1 == 0 && i2 > 0{
i2 -= 1;
num2[i2] - b'0' + i
}elseif i1 > 0 && i2 == 0{
i1 -= 1;
num1[i1] - b'0' + i
}else{
i2 -= 1;
i1 -= 1;
num1[i1] + num2[i2] - b'0' - b'0' + i
};
if a >= 10{
v[vindex] = a - 10;
i = 1;
}else{
v[vindex] = a;
i = 0;
}
if i1 == 0 && i2 == 0{
break;
}
vindex -= 1;
}
if i != 0{
vindex -= 1;
v[vindex] = 1;
}
v[vindex..]
.iter()
.fold(String::with_capacity((&v[vindex..]).len()), |mut x, y| {
x.push_str(&*y.to_string());
x
})
}
}