一、说三道四

   用代码实现简单的加减乘除运算会不会?只要你是个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"));
    }
}
大数相加

相关文章:

  • 2022-02-17
  • 2021-06-29
  • 2021-05-20
  • 2021-10-13
  • 2021-09-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
  • 2022-02-14
  • 2021-10-18
  • 2021-11-18
  • 2021-11-09
相关资源
相似解决方案