题解 | #高精度整数加法#
高精度整数加法
http://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
解题思路:
将两个字符串转化为u8
数组,比较两者长度后先按较短者长度加和,若较长者中还有剩余数组,再进行加和判断,最后判断进位re
是否还为1
。
将加和结果存储在v_3
数组中,最后倒序输出数组即可。
use std::{io, cmp::Ordering};
fn main() {
let mut s = String::new();
io::stdin().read_line(&mut s).expect("Failed To Read Line !");
let mut a = vec![];
for &i in s.trim().as_bytes() {
a.push(i - 48);
}
s.clear();
io::stdin().read_line(&mut s).expect("Failed To Read Line !");
let mut b = vec![];
for &i in s.trim().as_bytes() {
b.push(i - 48);
}
let (v_1,v_2) = match (a.len()).cmp(&(b.len())) {
Ordering::Equal | Ordering::Greater => (a,b),
Ordering::Less => (b,a),
};
let mut v_3 = vec![];
let (mut i,mut j,mut re) = (v_1.len(),v_2.len(),0u8);
while j > 0 {
let add = v_1[i-1] + v_2[j-1] + re;
match add {
0..= 9 => {
v_3.push(add);
re = 0;
}
_ => {
v_3.push(add - 10);
re = 1;
}
}
j -= 1;
i -= 1;
}
while i > 0 {
let add = v_1[i-1] + re;
match add {
0..= 9 => {
v_3.push(add);
re = 0;
}
_ => {
v_3.push(add - 10);
re = 1;
}
}
i -= 1;
}
if re > 0 {
v_3.push(re);
}
for k in v_3.iter().rev() {
print!("{}",k);
}
}
用 Rust 刷华为机试HJ 文章被收录于专栏
用 Rust 刷 HJ100 题,只需要懂基础 Rust 语法就能看懂