415. Add Strings

Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
The length of both num1 and num2 is < 5100. Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly

Solution:

惊了,将两个字符串转换为 long 再相加,再将 result 转换为 String,居然不对?代码留在这里先:

/*
 * This code is wrong.
 */

public class Solution
{
    public String addStrings(String num1, String num2)
    {
        long num1Int = 0, num2Int = 0;
        for (int i = num1.length() - 1; i >= 0; i--)
        {
            num1Int += (int)(num1.charAt(i) - '0') * Math.pow(10, num1.length() - i - 1);
        }

        for (int i = num2.length() - 1; i >= 0; i--)
        {
            num2Int += (int)(num2.charAt(i) - '0') * Math.pow(10, num2.length() - i - 1);
        }
        long result = num1Int + num2Int;
        return String.valueOf(result);
    }
}
Input:
"9333852702227987" 
"85731737104263"

Output:
"9419584439332251"

Expect:
"9419584439332250"

最高位为9就不对了……溢出?还多1……why?

看了 Discussion 发现都在模拟竖式加法…………先这么写吧……还从来没有模拟过竖式加法就当练习了

public class Solution 
{
    public String addStrings(String num1, String num2) 
    {
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        int carry = 0;
        String result = new String();
        while(i >= 0 || j >= 0 || carry >0)
        {
            int sum = 0;
            if(i >= 0)
            {
                sum += num1.charAt(i) - '0';
            }
            if(j >= 0)
            {
                sum += num2.charAt(j) -'0';
            }
            sum += carry;
            carry = (int)sum / 10;
            sum = sum % 10;
            result = String.valueOf(sum) + result;
            i--; 
            j--;
        }
        return result;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容