题解 | #大数加法#

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

1.解题思路:第一步:接收的两个string要想进行加法运算,必须先将其转为int类型。第二步:转为int类型后,s和t从个位开始两两相加,具体原理幼儿园学过,如下图。定义一个StringBuffer,将余位存入StringBuffer中,进位暂存用于下一次运算。如此循环。第三步:最终得出StringBuffer,将最终的进位补上,但是此时的StringBuffer是倒序的,使用函数reverse变为正常的数字顺序,return即可。 alt

2.代码实现:



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
    	//存放相加的结果
        StringBuffer stringBuffer = new StringBuffer();
        int slength = s.length() - 1;
        int tlength = t.length() - 1;
        //如果其中一个没有值,则和为另外一个值
        if (slength == -1)
            return t;
        if (tlength == -1)
            return s;
        //进位和余位
        int jinWei = 0;
        int yvWei = 0;
        //开始循环,循环结束条件为s,t都循环完,防止出现如:s比t长,t循环完了,s还没循环完。
        while (slength >= 0 || tlength >= 0) {
        //将s分割,(s.charAt(slength) - '0')将string转为整型。
            int snum = slength >= 0 ? (s.charAt(slength) - '0') : 0;
            int tnum = tlength >= 0 ? (t.charAt(tlength) - '0') : 0;        
            //将分割的数字进行运算,余位取余,进位取整。
            //需要先算余位,先前犯过这个错,先算进位将进位的上一次循环的值更新掉了,导致后算余位时出错
            yvWei = (snum + tnum + jinWei) % 10;
            jinWei = (snum + tnum + jinWei) / 10;
            //运算结果放入stringBuffer
            stringBuffer.append(yvWei);
            slength --;
            tlength --;
        }
        //循环运算结束,将进位补上
        if(jinWei != 0)
        stringBuffer.append(jinWei);
        //stringBuffer是反的,使用reverse函数反转
        //如99+99,上面循环结束后stringBuffer内容为891,反转即为198
        stringBuffer.reverse();
        return stringBuffer.toString();
    }

}
#大数加法#
全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务