大数加法
题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// 发现居然无法使用sb.toString(),有点坑
//StringBuffer sb = new StringBuffer();
//获取两个字符串的长度,是长的在前,短的在后
int s_len = s.length();
int t_len = t.length();
if(s_len < t_len) {
String temp = s;
s = t;
t = temp;
}
//各个索引的长度
s_len = s.length()-1;
t_len = t.length()-1;
char[] res = new char[s_len+2];
//结果数组的最大长度
int index = s_len+1;
//可以不用转换为字符数组,直接s.charAt();
char[] s_chars = s.toCharArray();
char[] t_chars = t.toCharArray();
//进制位
int carry = 0;
//低位加法计算
while( t_len >= 0){
int a = s_chars[s_len--] - '0';
int b = t_chars[t_len--] - '0';
int sum = a+b+carry;
res[index--] = (char)(sum%10 + '0');
carry = sum/10;
}
//高位的第一位需要与进制位加一下,其他直接补上
while( s_len >= 0){
int a = s_chars[s_len--] - '0' + carry;
res[index--] = (char)(a%10 + '0');
carry = a/10;
}
//当两字符串的长度一致,且有最高位的进制时
if(carry > 0){
res[index] = (char)(carry + '0');
//又是一个坑,无法使用String.valueof()
return new String(res);
}
return new String(res).substring(1);
}
}