题解 | #大数加法#
大数加法
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') ; } }
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录