题解 | #高精度整数加法#

高精度整数加法

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 语法就能看懂

全部评论

相关推荐

mq2:我倒是觉得这种敞亮一点好。能接受就去不能就不去呗。 完了跟现在“正常”公司一样,hr说的天花乱坠,进去一看根本就是996核动力牛马,想走又没应届生身份了。岂不是更糟。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务