给定两个非负数num1和num2表示为字符串,返回num1和num2之和.
num1和num2的长度均小于5100.
num1和num2都只包含数字0-9.
num1和num2都不包含任何前导零.
您不得使用任何内置BigInteger库或直接将输入转换为整数.
我尝试了我的解决方案,但它不起作用.建议?
public class Solution {
public String addStrings(String num1, String num2) {
double multiplier = Math.pow(10, num1.length() - 1);
int sum = 0;
for (int i = 0; i < num1.length(); i++){
sum += ((((int) num1.charAt(i)) - 48) * multiplier);
multiplier /= 10;
}
multiplier = Math.pow(10, num2.length() - 1);
for (int i = 0; i < num2.length(); i++){
sum += ((((int) num2.charAt(i)) - 48) * multiplier);
multiplier /= 10;
}
return "" + sum;
}
}
Run Code Online (Sandbox Code Playgroud)
您不得使用任何内置BigInteger库或直接将输入转换为整数.
请注意,您要添加两个最多5100位的整数.这是不是最高值,但最大位数.
一个int(你的sum变量)不能持有这样的价值观.BigInteger可以,但你不能使用它.
因此,像在纸上一样添加数字:添加最后一位数字,将总和的低位数字写为结果的最后一位,并在需要时结转一位数字.重复倒数第二位,倒数第三位等,直至完成.
由于总和至少是最长输入值的位数,并且可能长一个,因此您应该分配一char[]长度的最长输入加一.完成后,String(char[] value, int offset, int count)根据需要使用偏移量为0或1的方法构造最终字符串.