题解 | #大数加法#

大数加法

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

常规解题思路

一开始用String存结果,然后超出长度报错了,改成了可变长度类型StringBuilder就可以了,但是StringBuiler是线程不安全的,所以在多线程时StringBuffer更合适。


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        if(s.length()>100000||t.length()>100000)return null;//超出长度返回null
        if(s.isEmpty()||t.isEmpty())
            return s.isEmpty()?t:s;//如果有一个为空,则返回另一个数
        if(s.length()>t.length()){//把s作为短数,t作为长数
            String temp=s;
            s=t;
            t=s;
        }
        int m,n,sum,c=0;//m,n用于取数,sum按位求和,c为进位
        StringBuilder str=new StringBuilder();//Stringbuilder类型为可变长,并且单线程,所以比较合适
        int i=s.length()-1,j=t.length()-1;//i为s的游标,j为t的游标
        for(;i>=0||j>=0||c>0;i--,j--){//判断是否算完
            m=n=0;
            if(i>=0)m=Character.getNumericValue(s.charAt(i));
            if(j>=0)n=Character.getNumericValue(t.charAt(j));
            sum=m+n+c;
            c=sum/10;
            sum=sum%10;
            str.insert(0,sum);
        }
        return str.toString();
    }
}
全部评论

相关推荐

明天不下雨了:兄弟你是我今天看到的最好看的简历(我说的是简历风格跟简历书写)把985 211再搞亮一点。投boss就说;您好,我华科(985)研二在读,本科211。对您的岗位很感兴趣,希望能获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务