面试必考真题-算法篇:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

时间:2025-04-16 07:30:46

面试必考真题-算法篇 牛客网


字符串 模拟

题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)

题目分析

算法
1.保证s是较长的字符串,t是较短的字符串;如果不是,交换之。
2.用StrngBuilder保存计算结果,remainder保留进位;逐位计算和,计算到t字符串结束,每次计算和记得加上进位。
3.计算s比t多出的字符,同样记得加上进位。
4.最后如果进位不为0,结果还要加上进位。
5.得到的字符串翻转即是答案。

下面是Java代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        if(s.length() < t.length()){
            String tmp = s;
            s = t;
            t = tmp;
        }
        
        StringBuilder sb = new StringBuilder();
        int longLength = s.length();
        int shortLength = t.length();
        int carry = 0;
        
        for(int i = 0 ; i < shortLength ; i++){
            int add = (s.charAt(longLength -1 -i) -'0') +(t.charAt(shortLength -1 -i) -'0')+carry ;
            sb.append(add %10);
            carry = add/10;
        }
        
        for(int i = shortLength ; i< longLength ;i++){
            int add = (s.charAt(longLength -1-i) -'0') +carry;
            sb.append(add %10);
            carry = add/10;
        }
        
        if(carry != 0){
            sb.append(carry);
        }
        
        return sb.reverse().toString();
    }
}

参考/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=117&&tqId=35277&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking