Java简单高精度合集
第一个Java的算法程序。记得可以使用Alt+'/'自动补全sysout和main之类的。
BigInteger在java.math.BigInteger中。
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in); BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
BigInteger c=a.add(b); System.out.println(c);
sc.close();
}
}
顺便把A*B也搞了,Java是有FFT优化的乘法。
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in); BigInteger a=sc.nextBigInteger();
BigInteger b=sc.nextBigInteger();
BigInteger c=a.multiply(b); System.out.println(c);
sc.close();
}
}
减法也就是变成subtract罢了。
斐波那契大数:
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt(); BigInteger f0=BigInteger.ONE;
BigInteger f1=BigInteger.ONE; for(int i=1;i<n;i++) {
BigInteger t=f1;
f1=f0.add(f1);
f0=t;
} System.out.println(f1);
}
sc.close();
}
}
https://www.luogu.org/problemnew/show/P1604
Java的高精度整数还有很多意想不到的神奇功能。例如BigInteger其实可以修改进制。
在读入的时候先用String暂时保存结果,生成BigInteger的时候在第二个参数指定进制,在BigInteger的toString方法也可以指定进制。当需要进制转换时使用String作为中转就可以了。
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int b=sc.nextInt();
String sa=sc.next();
String sb=sc.next(); BigInteger ba=new BigInteger(sa,b);
BigInteger bb=new BigInteger(sb,b); BigInteger bc=ba.add(bb); System.out.println(bc.toString(b).toUpperCase());
}
sc.close();
}
}
要计算阶乘的和,熟悉一下BigInteger的初始化方法以及与正常的整数运算的方法:
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt(); BigInteger ans=BigInteger.ZERO; BigInteger fac=BigInteger.ONE; for(int i=1;i<=n;i++) {
fac=fac.multiply(BigInteger.valueOf(i));
ans=ans.add(fac);
} System.out.println(ans);
}
sc.close();
}
}
BigDecimal高精,注意BigDecimal的toString可能会出现科学计数法的结果。
注意!除法可能商是无限循环小数,这时候必须截断!
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);
其中scale是小数点后的精度。
而roundingMode也就是舍入模式:
输入RoundingMode.之后会出现如下:
CEILING //向正无穷方向舍入
FLOOR //向负无穷方向舍入 DOWN //向零方向舍入
UP //向远离0的方向舍入 HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN UNNECESSARY //计算结果是精确的,不需要舍入模式
四舍五入就是是用
ROUND_HALF_UP
而直接设置截断时,使用:
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("4.5635"); a = a.setScale(3, RoundingMode.HALF_UP); //保留3位小数,且四舍五入
System.out.println(a);
}
第一次使用BigDecimal的题:
https://www.luogu.org/problemnew/show/P1517
import java.math.BigDecimal;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
BigDecimal x=sc.nextBigDecimal();
int n=sc.nextInt(); BigDecimal ans=BigDecimal.ONE;
for(int i=0;i<n;i++) {
ans=ans.multiply(x);
//BigDecimal的乘法需要调用multiply()方法,乘以一个BigDecimal对象,返回一个BigDecimal对象
} String s=ans.toPlainString();
//在这里要使用toPlainString()方法,默认的toString()方法在某些情况是科学计数法,错了很多次才知道 /*
* 例如样例:
* 0.000001 5
*/ int len=s.length();
int leadzero=-1;
boolean metdot=false;
for(int i=0;i<len;i++) {
if(leadzero==-1&&s.charAt(i)!='0') {
leadzero=i;
//把整数部分的0去掉
}
if(s.charAt(i)=='.') {
metdot=true;
//遇到了小数点,说明是小数
break;
}
} if(metdot==true) {
s=s.substring(leadzero);
//遇到了小数点,说明是小数
len=s.length();
//重新计算s的长度,因为前面可能截断了整数部分的0
int releadzero=-1;
for(int i=len-1;i>=0;i--) {
if(s.charAt(i)!='0') {
releadzero=i+1;
//遇到第一个非零位置,其后的无效0截断
if(s.charAt(i)=='.') {
releadzero=i;
//遇到第一个非零位置是小数点,连小数点也截断
}
break;
}
}
s=s.substring(0,releadzero);
}
else {
//没有遇到小数点,是整数,不可能有无效0
;
} System.out.println(s);
}
sc.close();
}
}
Java简单高精度合集的更多相关文章
- 【死磕Java并发】----- 死磕 Java 并发精品合集
[死磕 Java 并发]系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览. 先来一个总览图: [高清图,请关注"Java技术驿站&quo ...
- 【转】Java面试题合集
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
- 9月最新184道阿里、百度、腾讯、头条Java面试题合集
阿里面试题 1. 如何实现一个高效的单向链表逆序输出? 2. 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 3. 给定一个二叉搜索树(BST),找到树中第 ...
- 史上最全最新java面试题合集二(附答案)
下面小编整理了本套java面试题全集,分享给大家,希望对大家的java学习和就业面试有所帮助. 51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断 ...
- Java面试题合集(二)
接下来几篇文章准备系统整理一下有关Java的面试题,分为基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注: ...
- Java多线程大合集
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...
- 史上最全最新Java面试题合集一(附答案)
下面小编整理了本套java面试题全集,分享给大家,希望对大家的java学习和就业面试有所帮助. 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征 ...
- java 常见下载合集
J2SE SDK (JDK): Windows: http://download.oracle.com/auth/otn-pub/java/jdk/6u25-b06/jdk-6u25-windows- ...
- Monkey学习(2)简单命令合集
Monkey命令的简单帮助 执行所有命令的前提是,必须先链接模拟器或者实体机,否则会报如下错误信息: 打开命令行窗口,WIN+R,输入CMD 在命令行窗口执行:adb shell monkey –he ...
随机推荐
- linux系统(ubuntu14.04)安装mentohust完毕校园网锐捷认证
近来升级电脑又一次做了系统.再次面临这linux系统下的各种校园网上网限制. 我在这里採用了mentohust来完毕锐捷认证. 这里我们选择Mentohust取代锐捷. Mentohust 是由华中科 ...
- Swift的可选链,类型转换和扩展
可选链(Optional Chaining) 可选链是一种请求或调用属性.方法,子脚本的过程. 可选性体现于请求或调用的目标当前可能为nil.若不为nil则成功调用.否则返回nil并将链失效. 调用可 ...
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
- linux上hadoop2.4.0安装配置
1 环境准备 安装java-1.6(jdk) 安装ssh 1.1 安装jdk (1)下载安装jdk 在/usr/lib下创建java文件夹,输入命令: cd /usr/lib mkdir java 输 ...
- ios NSAttributedString 具体解释
ios NSAttributedString 具体解释 NSAttributedString能够让我们使一个字符串显示的多样化,可是眼下到iOS 5为止,好像对它支持的不是非常好,由于显示起来不太方便 ...
- ansible 基本命令学习与踩坑
1. 命令行参数 -v,–verbose 详细模式,如果命令执行成功,输出详细的结果(-vv –vvv -vvvv) -i PATH,–inventory=PATH 指定host文件的路径,默认是在/ ...
- Java集合框架:Arrays工具类
java.util.Arrays类能方便地操作数组,它提供的方法都是静态的.整个Arrays工具类的实现有3000+行.可是归纳总结一下可知它有下面功能(9个): 1. asList 定义: @Saf ...
- 【DataStructure】Description and Introduction of Tree
[Description] At ree is a nonlinear data structure that models a hierarchical organization. The char ...
- 在Java中如何正确地终止一个线程
1.使用Thread.stop()? 极力不推荐此方式,此函数不安全且已废弃,具体可参考Java API文档 2.设置终止标识,例如: import static java.lang.System.o ...
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方式
如题,简单记录一下这个问题的解决的方法,导致问题的核心原因是:ajaxfileupload不支持响应头ContentType为application/json的设置.而且IE也不支持这样的格式,而当我 ...