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的长度,因为前面可能截断了整数部分的0int 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();} }
转载于:https://www.cnblogs.com/Yinku/p/10659597.html
Java简单高精度合集相关推荐
- 【毕设|Java项目开发合集】(附源码)
[毕设|Java项目开发合集] 14个Java项目(附源码)助你轻松搞定毕业设计! 1.新冠疫情统计系统 2.家教系统 3.进销存管理系统 4.饮食分享平台 5.宠物领养平台 6.销售评价系统 7.酒 ...
- Java面试核心知识点(283页)Java面试题合集最新版(485页)
阿里.腾讯两大互联网企业传来裁员消息,很多人都陷入担心,不安情绪蔓延-- 其实大家应该更冷静和理性地看待大厂裁员.每年三四月都是大厂人员调整期,这个季节是各个公司战略调整.战略规划的一个关键期,肯定会 ...
- java入门笔记合集(杂乱)(2)
java入门笔记合集(杂乱)2 StringBuilder 这是一个容器,可以和String搭配起来用 package day1;import java.util.Scanner;public cla ...
- 【Java游戏开发合集】毕业设计(附源码+资料+课件)
为正在准备毕业设计的小伙伴们以及想自学一些Java练手项目,小编终于整理出了本套视频课程(附源码+资料+课件),快来白嫖吧!!! 视频教程链接: 全站最全Java游戏合集!毕业设计!(附源码课件)8款 ...
- 【死磕Java并发】----- 死磕 Java 并发精品合集
原文出处:https://www.cmsblogs.com/category/1391296887813967872 『chenssy』 [死磕 Java 并发]系列是 LZ 在 2017 年写的第一 ...
- 26款JAVA毕设项目合集【java课设】
最新最全的JAVA项目合集来啦,看完这26套毕设不再发愁 最近UP整理了一些Java项目,从初级练手项目到企业级电商项目,全部配备源码及笔记,如果你能全部吃透,直接成神,各个大厂都为你打开大门! 大家 ...
- Java——集合(合集,简单的概括)
JAVA --集合 集合 概念: 1 .Collection接口与Iterator接口 2 .Collection<>接口 3 . List<>接口 3 .1 ArrayLis ...
- leetcode 简单题合集(Java版)
326. 3的幂 https://leetcode-cn.com/problems/power-of-three/ 题解: class Solution {public boolean isPower ...
- Java 小练习(简单)—合集
文章目录 1.while循环练习:回文数 2.for循环练习:求平方根 3.for循环练习:求质数 4.while循环练习:数字炸弹小游戏 5.数组练习:遍历数组求和 6.数组练习:交换数组中的数组 ...
最新文章
- 爱不释手(Typingfaster)1.78beta,重大升级,欢迎试用,期待反馈。
- CMU 刘畅流:爱上人机交互源于科幻片,女性研究AI更感性、更哲学 | 妇女节特辑...
- java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
- 数据库:分享四个实用的SQLServer脚本函数,欢迎收藏
- 决策树C4.5算法的不足
- 区块链(BlockChain)基础概念
- PyQt5实现局域网聊天工具
- H5游戏开发框架排名
- recyclerView多条目加载,点击动画事件
- EPC项目设计界面管理研究——以上海国际金融中心项目为例
- 什么是Map Reduce
- IOS微信内置浏览器音频加载问题
- 用汇编语言编程的计算机
- 1万元左右理财方法有那些
- Python3网络爬虫实战-38、动态渲染页面抓取:Splash的使用
- 小马哥 ------高仿三星S5刷机 高仿三星G9006系列拆机主板机型图与开机界面图
- 【数据结构】图的基本操作
- NANDFLASH介绍(转)
- 黑科技揭秘:面对海量的文本翻译任务,阿里翻译团队是如何解决的 1
- 百度百科关键词搜索获取信息
热门文章
- Python 中的黑暗角落(一):理解 yield 关键字
- django 热启动_传统的Web框架如何部署在Serverless架构上(以Flask为例)
- ffmpeg 硬解码
- python文本编码转换_python实现文件批量编码转换及注意事项
- 如何从数据库中筛选出达成指定里程碑节点的项目_如何用共识算法构建区块链共识网络?...
- nodejs实践录:简单的log日志模块
- Elasticsearch】 es Match Query
- 【Spring】spring depend-on 到底是干什么的?
- Spring: @Import @ImportResource引入资源
- Spark编译报错:missing or invalid depency detected while loading class file RDDOperationScope.class