java大数运算(讲解)
在算法竞赛或者面试中我们经常遇到大数问题,例如求一个很大的阶层,大数加法等等。
住在这种情况下我们用常规解法(使用long long或long long int)肯定是不行的,
而我们自己用c/c++写一个大数的算法又过于麻烦且易于出错,
在这种情况下使用java中自带的大数类是我们最好的选择,
相对比c/c++比较而言,java语言写大数是比较流氓的,但是代码量非常的少,而且容易理解,
你只需要调包就可以了。
BigInteger
package 大数;
import java.math.BigInteger;
import java.util.Scanner;
public class 大数 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger b1=new BigInteger("123456789");
BigInteger b2=new BigInteger("987654321");
System.out.println("加法操作:"+b2.add(b1));
System.out.println("减法操作:"+b2.subtract(b1));
System.out.println("乘法操作:"+b2.multiply(b1));
System.out.println("除法操作:"+b2.divide(b1));
System.out.println("最大数:"+b2.max(b1));
System.out.println("最小数:"+b2.min(b1));
BigInteger result[]=b2.divideAndRemainder(b1);
System.out.println("商是:"+result[0]+" "+"余数是:"+result[1]);
}
}
1.定义常用方法:
BigInteger a=new BigInteger(“123”); //第一种,参数是字符串 BigInteger a=BigInteger.valueOf(123); //第二种,参数可以是int、long
2.大整数比较大小
a.equals(b); //如果a、b相等返回true否则返回false a.compareTo(b); //a小于b返回-1,等于返回0,大于返回1
3.大数常用方法及常量
a.mod(b); //求余 a.gcd(b); //求最大公约数 a.max(b); //求最大值 a.min(b); //求最小值 BigInteger.ZERO //大整数0 BigInteger.ONE //大整数1 BigInteger.TEN //大整数10 //先转换成字符串再求字符串的长度 a.toString().length(); //a的类型为BigInteger
BigDecimal
使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。
对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class 大数 {
public static void main(String[] args) {
System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345, 3.333), 1));
System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345, 3.333), 3));
System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345, 3.333), 4));
System.out.println("除法运算:" + MyMath.div(10.345, 3.333, 3));
}
}
class MyMath {
public static double add(double d1, double d2) { // 进行加法计算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.add(b2).doubleValue();
}
public static double sub(double d1, double d2) { // 进行减法计算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.subtract(b2).doubleValue();
}
public static double mul(double d1, double d2) { // 进行乘法计算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.multiply(b2).doubleValue();
}
public static double div(double d1, double d2, int len) { // 进行除法计算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round(double d, int len) { // 进行四舍五入
BigDecimal b1 = new BigDecimal(d);
BigDecimal b2 = new BigDecimal(1); // 技巧
return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
java大数运算(讲解)的更多相关文章
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- java 大数运算[转]
用JAVA 实现算术表达式(1234324234324 + 8938459043545)/5 + 343434343432.59845 因为JAVA语言中的long 定义的变量值的最大数受到限制,例如 ...
- JAVA大数运算
java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...
- java 大数详细讲解
介绍 java中用于操作大叔的类主要有俩种 第一个是BigInteger,代表大整数.第二个是BigDecimal,代表大浮点数.两种类的操作方法类似,所以我们只讲解BigInterger的用法 基本 ...
- java 大数运算,高精度模板
转自:https://blog.csdn.net/stffer/article/details/46382949 有修改 关于BigInteger类更详细的用法请移步官方文档 package prac ...
- 通俗易懂的 Java 位操作运算讲解
所有数值都是2进制 软件开发者都知道 10 进制.16 进制.8 进制. 比如数字 10 的各位进制形式表现如下. 十进制:10 八进制:012 十六进制:0x0a 二进制:1010 原码 反码 补码 ...
- Java 大数运算
import java.util.*; import java.math.*; public class Main{ public static void main(String args[]){ S ...
- 可能是最通俗易懂的 Java 位操作运算讲解
https://blog.csdn.net/briblue/article/details/70296326
- 大数运算之 Java BigInteger 的基本用法
大数运算之 Java BigInteger 的基本用法 在程序设计竞赛中会遇到高精度运算的问题,C++没有高精度运算,只能手动模拟人工运算,手动实现高精度,而 java.math 包中的 BigInt ...
随机推荐
- JAVA设计模式-动态代理(Proxy)源码分析
在文章:JAVA设计模式-动态代理(Proxy)示例及说明中,为动态代理设计模式举了一个小小的例子,那么这篇文章就来分析一下源码的实现. 一,Proxy.newProxyInstance方法 @Cal ...
- 生产环境轻量级dns服务器dnsmasq搭建文档
dnsmasq搭建文档 一.生产环境域名解析问题 之前生产环境设备较少,是通过维护master(192.168.1.1)设备的hosts文件实现的.每次新增设备后,需要在master的hosts文件中 ...
- FP-Tree算法详细过程(Java实现)
我就不说FP-Tree的作用.优点什么的了,直接用例子来解释构建FP-Tree和找出所有频繁项集,第一次写博客,不对之处还请指出. 输入文件: testInput.txt T1 T2 T3 T4 T5 ...
- mysql 查找数组格式的字符串中是否包含某个值
--#{type}表示将判断的单个值 例如 -- arr表示数组格式的字符串,例如 ,,, FIND_IN_SET(#{type},arr) 使用的时候,举例:
- Fork/Join 框架框架使用
1.介绍 Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.在多核计算机中正确使用可以很好的 ...
- 【转+】python为什么推荐使用多进程
最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研 ...
- git将当前分支上修改的东西转移到新建分支
比如我在A分支做了一些修改,现在由于某种原因(如A分支已经合并到master)不能把A分支上修改的东西保留下来但是需要把A分支上修改的东西继续在新分支继续修改.那么现在我们可以有两种简单的做法完成这一 ...
- MongoDB 学习笔记之 $or与索引关系
$or与索引关系: 对leftT集合的timestamp创建索引 执行$or语句:db.leftT.find({$or: [{ "timestamp" : 5},{"ag ...
- asp.net core刷新css缓存
在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...
- B-线性代数-矩阵转置
[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...
