fnadd(num1:&str,num2:&str)->Result<String,String>{constZERO_CHAR:u8='0'asu8;letmutreversed_result=Vec::<u8>::new();letmax_digits=num1.len().max(num2.len());macro_rules!convert_num{($num:expr)=>{$num.chars().rev().chain(['0'].iter().cloned().cycle())}}letdigits1=convert_num!(num1);letdigits2=convert_num!(num2);letmutcarry=0;for(digit1,digit2)indigits1.zip(digits2).take(max_digits){fndigit_to_numeric(digit:char)->Result<u8,String>{if'0'<=digit&&digit<='9'{Ok(digitasu8-ZERO_CHAR)}else{Err(format!("{:?} is not a digit",digit))}}letdigit1=digit_to_numeric(digit1)?;letdigit2=digit_to_numeric(digit2)?;letdigit_sum=digit1+digit2+carry;carry=digit_sum/10;assert!(carry<10);reversed_result.push(digit_sum%10+ZERO_CHAR);}if0<carry{reversed_result.push(carry+ZERO_CHAR);}reversed_result.reverse();Ok(String::from_utf8(reversed_result).expect("We only added digits"))}
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Rust: