java 百亿计算器_java面试题--实现一个百亿的计算器
看了网上很多说法,没有具体把它实现的,我试了一下其实还是比较简单的。
直接看代码:
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面试题--实现一个百亿的计算器相关推荐
- java cglib jar包_Java面试题|反射必看的4道面试题
上三篇: 动力节点:Java面试题|多线程21道必看面试题zhuanlan.zhihu.com 动力节点:面试题|Java基础17道常见面试题zhuanlan.zhihu.com 动力节点:面试题 ...
- 计算器算贝塞尔公式_一个强大的高等数学计算器
学过高等数学的你... 是否苦于复杂的积分不会算?级数不会算?极限不会求? 说到数学软件,你只能想到Matlab?或者Mathematica? 当然,会这些软件你也很牛了! 可是...大多数人记不清相 ...
- java闰年判断原理_java 面试题闰年判断详解及实例
java 面试题闰年判断详解及实例 java 闰年判断 前言: 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数: 2. 年份是400 ...
- java 线程池 分组_JAVA面试题解惑系列(十)——话说多线程
线程或者说多线程,是我们处理多任务的强大工具.线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享:而线程是运行在进程内部的,每个正在运行的进程至少有一个线程 ...
- java实现混合运算_java图形化界面实现简单混合运算计算器
写了好几天了终于写完了这个四则运算计算器,总代码放在后面 截图如下: 首先是布局都比较简单,最上面的一个框是总的输出框, 第二个框是每次输入的数字显示在框内, 对于每一个按钮都增加监听器, 对于数字按 ...
- java list 删除元素_Java面试题:List如何一边遍历,一边删除?
这是最近面试时被问到的1道面试题,本篇文章对此问题进行总结分享. 面试清单(Java岗):Java+JVM+数据库+算法+Spring+中间件+设计模式shimo.im 1. 新手常犯的错误 可能很 ...
- JAVA 面试背 通过_java面试题背不下来怎么办?java面试题总结
最近有很多java人员反映,说java面试题太多根本就背不下来,这可急坏了他们,毕竟要去面试java工作的,那么接下来,我们就来给大家讲解一下java面试题背不下来的解决方法. 其实java面试题背不 ...
- java面向对象容许单独_Java笔试题附答案
Java笔试题附答案 http://www.doczj.com/doc/3332c4e2524de518964b7dec.html 2009年05月19日来源:http://www.doczj.com ...
- java基础和答案_Java基础试题和答案.doc
Java基础试题和答案分析 Java试题 1) java程序中,main方法的格式正确的是(). (选择一项) a)static void main(String[] args) b)public v ...
最新文章
- Python setup.py开发与安装
- 最完整的Explain总结,SQL优化不再困难
- leetcode day2 -- Sort List Insertion Sort List
- uitextfield 键盘类型_UITextField 键盘弹出问题
- 文献学习(part34)
- jquery-显示隐藏-链式调用
- 字节跳动面试流程和考点都在这儿
- 搭建前端监控系统(二)JS错误监控篇
- Protobuf简单编写与使用
- php 复制文件夹并压缩到最小_php实现对文件压缩简单的方法
- python调用有道翻译API进行翻译
- 终于发现路由器里的广告秘密
- MSP432E4系列编码器(QEI模块)速度换算
- Android App集成支付宝
- nginx master-worker工作模式简析
- 在线生成免费android ios图标
- 青龙面板----今日头条脚本修复版
- 开源软件新时代:55个经典开源Wind…
- 添加全部文件夹到vss服务器
- 腾讯云-如何选择购云资源聚划算