题解 | #大数加法#

大数加法

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    //         cur_num:当前计算结果
    //         Bao:为保留位
    //         Jin:当前进位
    //诸位计算: cur_num = s[i] + s[j] + Jin
    //从cur_num中分离出Bao和Jin
    public String solve (String s, String t) {
        if(s == null && t == null) return "0" ;
        if(s != null && s.length() == 0) 
            return (t == null || t.length()== 0)  ? "0" : t ;
        if(t != null && t.length() == 0) 
            return (s == null || s.length() == 0) ? "0" : s ;
        char[] ss = s.toCharArray() , tt = t.toCharArray() ;
        StringBuilder st = new StringBuilder("") ;
        int slen = ss.length ,tlen = tt.length ;
        int i = slen - 1 , j = tlen - 1 ;
        int bao = 0 ;//当前保留位
        int jin = 0 ;//当前进位
        int cur_num = 0 ;//当前计算结果
        while(i >= 0 && j >= 0) {
            cur_num = sum(ss[i] , tt[j]) + jin ;
            if(cur_num >= 10) {
                jin = 1 ;
                bao = cur_num - 10 ;
            } else {
                jin = 0 ;
                bao = cur_num ;
            }
            st.append((char)(bao+'0')) ;
            j -- ;
            i -- ;
        }
        while(i >= 0) {
            cur_num = sum(ss[i] , '0') + jin ;
            if(cur_num >= 10) {
                jin = 1 ;
                bao = cur_num - 10 ;
            } else {
                jin = 0 ;
                bao = cur_num ;
            }
            st.append((char)(bao+'0')) ;
            i -- ;
        }
        while(j >= 0) {
            cur_num = sum(tt[j] , '0') + jin ;
            if(cur_num >= 10) {
                jin = 1 ;
                bao = cur_num - 10 ;
            } else {
                jin = 0 ;
                bao = cur_num ;
            }
            st.append((char)(bao+'0')) ;
            j -- ;
        }
        if(jin != 0) {
            st.append('1') ;
        }
        return st.reverse().toString() ;
    }
    
    public int sum(char ch1 , char ch2) {
        return (int)(ch1-'0') + (int)(ch2-'0') ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务