运用BigInteger实现百亿计算器

简介: 运用BigInteger实现百亿计算器。

image

import java.util.*;

import java.io.*;
import java.math.BigInteger;

public class Main{

    public static void main(String[] arg){
        Scanner scan = new Scanner(new BufferedInputStream(System.in));
        int n = scan.nextInt();
        int l = n;
        while(n--!=0){
            BigInteger integer = new BigInteger(scan.next());
            BigInteger integer2 = new BigInteger(scan.next());
            System.out.println("Case " + (l-n+1) + ":");
            System.out.println(integer + " + " + integer2  +  " = " +integer.add(integer2));
            if(n!=1){
                System.out.println();
            }
        }
    scan.close();
    }

}

使用自定义大数处理类MBigInteger实现:

主要思路是将输入的数字作为字符串传入自定义类中,处理每个符号的计算。

实现中只处理的正整数的情况。

沿着这个思路 结合正则表达式 并完善各种BUG,可以实现百亿计算器。

以下是实现代码:

import java.util.*;

import java.io.*;

public class Main{

    public static void main(String[] arg){
        Main m = new  Main();
        Scanner scan = new Scanner(new BufferedInputStream(System.in));
        int n = scan.nextInt();
        int l = n;
        while(n--!=0){
            MBigInteger integer = m.new MBigInteger(scan.next());
            MBigInteger integer2 = m.new MBigInteger(scan.next());
            System.out.println("Case " + (l-n) + ":");
            System.out.println(integer + " + " + integer2  +  " = " + integer.add(integer2));
            if(n!=0){
                System.out.println();
            }
        }
        scan.close();
    }

    class MBigInteger{

        private MBigInteger(){};

        private String s; 

        public MBigInteger(String s){
            this.setS(s);
        }

        public MBigInteger add(MBigInteger integer){//只处理正整数
            char[] ch1 = getS().toCharArray();
            char[] ch2 = integer.getS().toCharArray();
            int len = ch1.length;
            int len2 = ch2.length;
            int n = len;
            char[] resultChars;
            if(len<len2){
                n = len2;
            }
            resultChars = new char[ n ];
            boolean overTen = false;
            int ans;
            while(len!=0&&len2!= 0){
                int o = 0;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch1, len-1) + getIntValueAt(ch2, len2-1) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + '0');
                len -- ;
                len2 -- ;
            }
            while(len--!=0){
                int o = 0;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch1, len) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + '0');
            }
            while(len2--!=0){
                int o = 0 ;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch2, len2) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + '0');
            }
            if(overTen){
                setS("1".concat(String.valueOf(resultChars)));
            }else{
                setS(String.valueOf(resultChars));
            }
            return this;
        }

        @Override
        public String toString() {
            return this.getS();
        }

        public String getS() {
            return s;
        }

        public void setS(String s) {
            this.s = s;
        }

        public int getIntValueAt(char[] c,int i){
            return c[i]-'0';
        }
    }

}

原文发布时间为:2018-07-31
本文作者:Java杂记
本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记

相关文章
|
4月前
|
Java Android开发
Java实现月工资个人所得税及各保险计算问题
Java实现月工资个人所得税及各保险计算问题
28 0
|
7月前
|
关系型数据库 MySQL Java
BigDecimal 使用注意,避免线上问题
BigDecimal 使用注意,避免线上问题
59 0
|
10月前
|
机器学习/深度学习 Python
Python编程实现计算存款利息
Python编程实现计算存款利息
293 0
|
10月前
一个简易的计算器(整数)函数
一个简易的计算器(整数)函数
|
11月前
R7-3 计算个人所得税
R7-3 计算个人所得税
92 0
|
11月前
VBA 2000年之后活期存款利息计算
VBA 2000年之后活期存款利息计算
50 0
BigDecimal加减乘除计算以及比较大小
BigDecimal加减乘除计算以及比较大小
73 0
BigDecimal加减乘除计算以及比较大小
BigDecimal加减乘除计算
BigDecimal加减乘除计算
66 0
|
前端开发
一个很简易的计算器
一个很简易的计算器
72 0
一个很简易的计算器
自制计算器,实现加减乘除
自制计算器,实现加减乘除
81 0