算法之大数相加Java版
一道面试题,就是用字符串表示两个数,求这两个数的加法。(不能使用内置类BigInteger)
我一开始想到的就是把字符串转成字符数组,然后使用mergesort的思路来处理。
一开始使用的是Integer.parsetInt(String.valueOf(char))有些麻烦,后来改成了'9'-'0'这种方式
来把char转成整数。
如下:
static String bigNumberAdd2(String add1, String add2) { char[] v1 = add1.toCharArray(); char[] v2 = add2.toCharArray(); StringBuilder sb = new StringBuilder(); int N1 = v1.length - 1; int N2 = v2.length - 1; int sum = 0; int carry = 0; while (N1 > -1 && N2 > -1) { sum = ( v1[N1] - '0' ) + ( v2[N2] - '0') + carry; carry = sum / 10; sum = sum % 10; sb.append(sum); N1--; N2--; } while(N1>-1) { sum = ( v1[N1] - '0' ) + carry; carry = sum / 10; sum = sum % 10; sb.append(sum); N1--; } while(N2>-1) { sum = ( v2[N2] - '0') + carry; carry = sum / 10; sum = sum % 10; sb.append(sum); N2--; } return sb.reverse().toString(); }
你会发现后面的while循环内容是一样的,所以经过思考优化,有了下面的版本:
static String bigNumberAdd(String add1, String add2) { char[] v1 = add1.toCharArray(); char[] v2 = add2.toCharArray(); StringBuilder sb = new StringBuilder(); int N1 = v1.length - 1; int N2 = v2.length - 1; int sum = 0; int carry = 0; while (N1 > -1 || N2 > -1) { sum = (N1 > -1 ? v1[N1] - '0' : 0) + (N2 > -1 ? v2[N2] - '0' : 0) + carry; carry = sum / 10; sum = sum % 10; sb.append(sum); N1--; N2--; } return sb.reverse().toString(); }
Looking for a job working at Home about MSBI