一、说三道四
用代码实现简单的加减乘除运算会不会?只要你是个coder,我想这个答案都是肯定的吧!
但是,今天我想说的是,当我们的运算遇到了大数,用原本的int、long、float、double数值类型
都无法表示出来的时候,你们想过该如果解决这一类型的问题了吗?
在这,你们可以先不用看卤煮撸的代码,想想如果自己遇到这个问题,该如果解决,也许你的想法
很新颖,思路以及在算法的实现上更清晰。希望能够在广大的博友的集思广益下,大数的运算能够有
一套更好的解决方案。不说了,咱们先撸代码吧。毕竟这才是主题!!!
二、大数运算之加法运算
package com.linjm.work; public class Add { public String forAdd(String p, String q) { String x = p; String y = q; int len = 0; String res = ""; len = (x.length() > y.length()) ? x.length() : y.length(); if (len == x.length()) y = Tools.fillZero(y, x.length() - y.length()); if (len == y.length()) x = Tools.fillZero(x, y.length() - x.length()); x = Tools.reverse(x); y = Tools.reverse(y); //m,n用于循环遍历时截取字符串x,y的每一位 //flag用于标识m和n的每一次相加是否需要进位 int m, n, flag = 0; //遍历x、y,对应位相加 for (int i = 0; i < len; i++) { int sum; m = Integer.parseInt(x.substring(i, i + 1)); n = Integer.parseInt(y.substring(i, i + 1)); sum = m + n; if (flag == 1) { sum = sum + 1; flag = 0; } if (sum >= 10) { flag = 1; sum = sum - 10; } res += sum; } if (flag == 1) //最高位相加后还大于10,则须进位 res += "1"; return Tools.reverse(res); } public static void main(String[] args) { Add add = new Add(); System.out.println(add.forAdd("555555555555555555", "5555555555555555551")); } }