面试必考真题-算法篇 牛客网
字符串 模拟
题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于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