Java实现大数据简单运算

Java已经有BigIntegerBigDecimal俩个大数据处理类

因为一直想自己实现一个,
所以花了点时间自己写了一个
能加(减)乘(除)
理论上数据大小由堆中可开辟内存大小决定

废话不多说,上代码:

import java.util.ArrayList;

import java.util.List;
import java.util.Scanner;



public class Tmep {

    public static void main(String[] args) {
        Except except = new Except();
        except.set();

        except.productList();
        except.getLr();

    }

}
class Except{
    private List l1 ;
    private List l2 ;
    private List lx ;
    private List lr ;
    protected Scanner input ; 

    public  Except() {
        l1 = new ArrayList();
        l2 = new ArrayList();
        lx = new ArrayList();
        lr = new ArrayList();
        //默认关闭状态
        /*长度指定有缺少默认值时不指定
        */
    }

    public void getLr() {
        for(int i = 0 ; i < lr.size() ; i++) {
            System.out.print(lr.get(i));
        }
    }
    public void set() {
        input = new Scanner(System.in);

        String string = input.next();
        int ch ;
        for(int i = 0 ; i < string.length() ;i++) {
             ch = string.charAt(i) - '0';
             //添加成功
             l1.add(i,(short) ch);      
        }
        String str = input.next();
        for(int i = 0 ; i < str.length() ;i++) {
             ch = str.charAt(i) - '0';
             //添加成功
             l2.add(i,(short) ch);      
        }
        input.close();
    }


    /**
     * 将l1和l2求和
     * 获得最快速度
     */
    public void sumList(List l1 ,List l2 ,List lr) {
        List b1,b2 ;//存放b1的为最大的
        if(l1.size() < l2.size()) {
            b1 = l2;
            b2 = l1;
        }
        else {
            b1 = l1;
            b2 = l2;
            }
        Short bt1 = 0 , bt2 = 0  ,bt3 = 0 ,bt4 = 0;


        //设置lr的长度 


            int i = 0;
        for(int j = 0  ; j < b2.size() ;j++) {
            i=j;
            //小的为下部所要加的
            bt2 = (Short) b2.get(b2.size()-1 - j);
            bt4 = bt2;
            while(true) {

                //大的为上部执行加减的
                bt1 = ((Short)b1.get(b1.size()-1-i));       
                bt3 =  (short) ((bt4+bt1) %10) ;//本位所要保留的数
                lr.set(lr.size()-1-i, bt3);
                bt4 = (short) ((bt4+bt1) / 10);//前进一位所获得的数字
                if(i+1==b1.size()) {
                    //将最后一个进位放入开头
                    if(bt4!=0) {
                        lr.add(lr.size()-b1.size(), (short)bt4);
                    }
                    break;
                }

                i++;
            }

        }

    }


    public void productList() {
        List b1,b2 ;//存放b1的为最大的
        if(l1.size() < l2.size()) {
            b1 = l2;
            b2 = l1;
        }
        else {
            b1 = l1;
            b2 = l2;
            }
        Short bt1 = 0 , bt2 = 0  ,bt3 = 0 ,bt4 = 0;


        //设置长度 为俩个乘积数的位数和
        for(int j = 0 ; j short) 0);

        }
        int  t=0;
        for(int j = 0  ; j < b2.size() ;j++) {
            t=j;
            //重置lx
            lx.clear();
            for(int p = 0 ; pshort) 0);
            }
            //小的为下部所要乘的
            bt2 = (Short) b2.get(b2.size()-1 - j);
            bt4 = 0;
            int i = 0;
            while(true) {

                //大的为上部执行乘的
                bt1 = ((Short)b1.get(b1.size()-1-i));       
                bt3 =  (short) ((bt4+bt1*bt2) %10) ;//本位所要保留的数
                lx.set(lx.size()-1-t, bt3);
                bt4 = (short) ((bt4+bt1*bt2) / 10);//前进一位所获得的数字
                if(i+1==b1.size()) {
                    //将最后一个进位放入
                    lx.set(lx.size()-t-2, (short)bt4);
                    break;
                }
                t++;
                i++;
            }

            //求得lx与此位数下的lr和
            this.sumList(lr, lx ,lr); 

    }
}
}

自己写的没有代码检查,规范也谈不上,大家随意看看吧。。。
顺带放一张截图吧



Java实现大数据简单运算_第1张图片

你可能感兴趣的:(日常撸代码)