实现2个超大数的加法运算

来源:互联网 发布:制作画册的软件 编辑:程序博客网 时间:2024/05/21 22:28

一道笔试题~实现2个超大数据的加法运算,这2个超大数,意思就是long也装不下的数,就顶大概100位吧。


这道题其实看上去很简单,但是实际上涉及到的知识点还是很多的,非常考验一个人的程序设计能力和对API的熟悉程度。


思路很简单,这么大的数,long都存不下,那只能存在String中了,然后将每个数字取出,放到数组,由最末位开始计算,算加法,判断是否进位,进位则前位+1,若超过长度,则copy到新的数组。


下面上代码:

public class BigInt {private int[] digitals;public BigInt(String inputDigitals) {StringBuffer sb = new StringBuffer(inputDigitals);String string = sb.reverse().toString();digitals = new int[string.length()];for (int i = 0; i < string.length(); i++) {digitals[i] = Integer.valueOf(string.substring(i, i + 1));}}private int[] instance() {return digitals;}public static String bigAdd(BigInt b1, BigInt b2) {String result = "";boolean falg = false;int[] c1;int[] c2;int[] c3 = null;if (b1.instance().length >= b2.instance().length) {c1 = b1.instance();c2 = b2.instance();} else {c1 = b2.instance();c2 = b1.instance();}for (int i = 0; i < c2.length; i++) {if (c1[i] + c2[i] < 10) {c1[i] = (c1[i] + c2[i]);} else if (c1[i] + c2[i] >= 10) {c1[i] = (c1[i] + c2[i] - 10);if ((i + 1) < c1.length) {c1[i + 1] = (c1[i + 1] + 1);} else {falg = true;c3 = new int[c1.length + 1];System.arraycopy(c1, 0, c3, 0, c1.length);c3[c1.length] = 1;}}}if (falg) {for (int i : c3) {result += i;}} else {for (int i : c1) {result += i;}}return new StringBuffer(result).reverse().toString();}}

Test:

public class Test {public static String s2 = "431399914813";public static String s1 = "831399924";public static void main(String[] args) {String result = BigInt.bigAdd(new BigInt(s1), new BigInt(s2));System.out.println(result);}}

结果就不贴了,大家都懂的。


PS :程序中有些地方处理比较烦的原因是字符、byte、int之间的转化,也许写的不是很完善,有不妥的地方请指出,写完后发现,其实这种方法效率上有很大能改善的地方,这里是将每个字符取出来,其实可以充分利用存储空间,取多位进行计算,这样可以更好的提高效率。

5 1
原创粉丝点击