看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的。

直接看代码:

packagecom.infomorrow;importjava.math.BigInteger;importorg.junit.Test;/*** @ClassName: test_biginteger

* @Description: 设计一个百亿计算器的回头乘除

*@author: amosli

* @email:[email protected]

* @date 2014年2月26日 下午12:48:51*/

public classtest_biginteger {

@Testpublic voidtest(){double x = Math.pow(2, 64);

BigInteger xBigInteger= BigInteger.valueOf((long) x);double y = Math.pow(2, 64);

System.out.println("y = "+y);

BigInteger yBigInteger= BigInteger.valueOf((long) y);

System.out.println("x*y = "+multiply(xBigInteger, yBigInteger));

System.out.println("x+y = "+add(xBigInteger, yBigInteger));

System.out.println("x-y = "+subtract(xBigInteger, yBigInteger));

System.out.println("x/y = "+divide(xBigInteger, yBigInteger));

}/** 加法:x+y*/

publicBigInteger add(BigInteger x,BigInteger y){returnx.add(y);

}/** 减法: x-y*/

publicBigInteger subtract(BigInteger x,BigInteger y){returnx.subtract(y);

}/** 乘法: x*y*/

publicBigInteger multiply(BigInteger x,BigInteger y){returnx.multiply(y);

}/** 除法:x/y*/

publicBigInteger divide(BigInteger x,BigInteger y){returnx.divide(y);

}

}

输出结果:

y = 1.8446744073709552E19x*y = 85070591730234615847396907784232501249x+y = 18446744073709551614x-y = 0x/y = 1

看了上面的代码,是不是感觉很简单?

这里用到了 BigInteger这个类中的方法进行加减乘除的。

常见的数据类型:

数据类型 类型名 位长 取值范围 默认值

布尔型 boolean 1 true,false false

字节型 byte 8 -128-127 0

字符型 char 16 ‘\u000’-\uffff ‘\u0000’

短整型 short 16 -32768-32767 0

整型 int 32 -2147483648,2147483647 0

长整型 long 64 -9.22E18,9.22E18 0

浮点型 float 32 1.4E-45-3.4028E+38 0.0

双精度型 double 64 4.9E-324,1.7977E+308 0.0

这里特别要提出出的两种类型:

BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的.

BigDecimal BigDecimal的实现利用到了BigInteger, 所不同的是BigDecimal加入了小数位的概念,所以对于想要精度的同学来说用这个比较好。

BigDecimal.ROUND_UP 最后一位如果大于0,则向前进一位,正负数都如此。

BigDecimal.ROUND_DOWN 最后一位不管是什么都会被舍弃。

BigDecimal.ROUND_CEILING 如果是正数,按ROUND_UP处理,如果是负数,按照ROUND_DOWN处理。例如7.1->8; -7.1->-7;所以这种近似的结果都会>=实际值。

BigDecimal.ROUND_FLOOR 跟BigDecimal_ROUND_CEILING相反。例如7.1->7;-7.1->-8。这种处理的结果<=实际值。

BigDecimal.ROUND_HALF_DOWN 如果最后一位<=5则舍弃,如果>5, 向前进一位。如7.5->7;7.6->8;-7.5->-7

BigDecimal.ROUND_HALF_UP 如果最后一位<5则舍弃,如果>=5, 向前进一位。反之舍弃。如7.5->8;7.4->7;-7.5->-8

BigDecimal.ROUND_HALF_EVEN 如果倒数第二位是奇数,按照BigDecimal.ROUND_HALF_UP处理,如果是偶数,按照

BigDecimal.ROUND_HALF_DOWN来处理。如7.5->8;8.5->8;7.4->7;-7.5->-8

用BigDecimal实现乘法,保留了精度,上面x,y定义不变,可以改写为:

BigDecimal aBigDecimal =BigDecimal.valueOf(x).multiply(BigDecimal.valueOf(y));

System.out.println("aBigDecimal:"+aBigDecimal);

输出:

aBigDecimal:3.40282366920938477630474056040704E+38

原文:http://www.cnblogs.com/amosli/p/3568980.html

java 百亿计算器_java面试题--实现一个百亿的计算器相关推荐

  1. java cglib jar包_Java面试题|反射必看的4道面试题

    上三篇: 动力节点:Java面试题|多线程21道必看面试题​zhuanlan.zhihu.com 动力节点:面试题|Java基础17道常见面试题​zhuanlan.zhihu.com 动力节点:面试题 ...

  2. 计算器算贝塞尔公式_一个强大的高等数学计算器

    学过高等数学的你... 是否苦于复杂的积分不会算?级数不会算?极限不会求? 说到数学软件,你只能想到Matlab?或者Mathematica? 当然,会这些软件你也很牛了! 可是...大多数人记不清相 ...

  3. java闰年判断原理_java 面试题闰年判断详解及实例

    java 面试题闰年判断详解及实例 java 闰年判断 前言: 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数: 2. 年份是400 ...

  4. java 线程池 分组_JAVA面试题解惑系列(十)——话说多线程

    线程或者说多线程,是我们处理多任务的强大工具.线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享:而线程是运行在进程内部的,每个正在运行的进程至少有一个线程 ...

  5. java实现混合运算_java图形化界面实现简单混合运算计算器

    写了好几天了终于写完了这个四则运算计算器,总代码放在后面 截图如下: 首先是布局都比较简单,最上面的一个框是总的输出框, 第二个框是每次输入的数字显示在框内, 对于每一个按钮都增加监听器, 对于数字按 ...

  6. java list 删除元素_Java面试题:List如何一边遍历,一边删除?

    这是最近面试时被问到的1道面试题,本篇文章对此问题进行总结分享. 面试清单(Java岗):Java+JVM+数据库+算法+Spring+中间件+设计模式​shimo.im 1. 新手常犯的错误 可能很 ...

  7. JAVA 面试背 通过_java面试题背不下来怎么办?java面试题总结

    最近有很多java人员反映,说java面试题太多根本就背不下来,这可急坏了他们,毕竟要去面试java工作的,那么接下来,我们就来给大家讲解一下java面试题背不下来的解决方法. 其实java面试题背不 ...

  8. java面向对象容许单独_Java笔试题附答案

    Java笔试题附答案 http://www.doczj.com/doc/3332c4e2524de518964b7dec.html 2009年05月19日来源:http://www.doczj.com ...

  9. java基础和答案_Java基础试题和答案.doc

    Java基础试题和答案分析 Java试题 1) java程序中,main方法的格式正确的是(). (选择一项) a)static void main(String[] args) b)public v ...

最新文章

  1. Python setup.py开发与安装
  2. 最完整的Explain总结,SQL优化不再困难
  3. leetcode day2 -- Sort List Insertion Sort List
  4. uitextfield 键盘类型_UITextField 键盘弹出问题
  5. 文献学习(part34)
  6. jquery-显示隐藏-链式调用
  7. 字节跳动面试流程和考点都在这儿
  8. 搭建前端监控系统(二)JS错误监控篇
  9. Protobuf简单编写与使用
  10. php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
  11. python调用有道翻译API进行翻译
  12. 终于发现路由器里的广告秘密
  13. MSP432E4系列编码器(QEI模块)速度换算
  14. Android App集成支付宝
  15. nginx master-worker工作模式简析
  16. 在线生成免费android ios图标
  17. 青龙面板----今日头条脚本修复版
  18. 开源软件新时代:55个经典开源Wind…
  19. 添加全部文件夹到vss服务器
  20. 腾讯云-如何选择购云资源聚划算

热门文章

  1. HTML5前期学习准备(一)
  2. 东北育才 d1t1 优雅的序列
  3. (14)主流WLAN标准及用途
  4. 引申5“生命起源VS电影机械公敌VS大数据、人工智能“
  5. 曾经的银行行长放弃安稳的职业,选择南下创业。
  6. 如何获取网页真实地址
  7. RFID射频卡、IC卡、ID卡在称重系统中有什么作用
  8. Pointnet(part_seg)train.py,test.py代码随记
  9. git pull fatal: 拒绝合并无关的历史
  10. MyBatis02:CRUD 操作