JAVA大数高精度

板子一

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    static BigDecimal gold = new BigDecimal("1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788");

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);//定义输入
        while(sc.hasNext()) {
            BigDecimal a = new BigDecimal(sc.next());//输入
            BigDecimal b = new BigDecimal(sc.next());
            if(a.compareTo(b)==1) {//compareTo比较函数,如果a>b返回1,      a<b返回-1,a==b返回0;
                BigDecimal c=a;
                a=b;
                b=c;
            }
            BigDecimal temp = b.subtract(a).multiply(gold).subtract(a);
            //if(a!=floor(k*gold)

            if(temp.compareTo(BigDecimal.ONE)==-1 && temp.compareTo(BigDecimal.ZERO)==1)
                System.out.println(0);
            else
                System.out.println(1);
        }
    }

}

1. b1.add(b2).doubleValue();//表示b1+b2的结果转换成double

add//加法  subtract//减法  multiply//乘法  divide //除法

2.for(int i=1;i<=n;i++) { ans=ans.multiply(BigInteger.valueOf(i)); }

//Ans为大数,所以要把i转换为大数类型

3.String s=ans.toPlainString();

         if(s.charAt(0)=='0') {//charAt(n)返回字符串中下标为n的字符

         s=s.substring(1);

         }

 

 

//d为int型,a,b,c都为大数
c=a.add(b);             //  相加
c=a.subtract(b);       //    相减
c=a.multiply(b);          // 相乘
c=a.divide(b);        // 相除取整
c=a.gcd(b);          //  最大公约数
c=a.remainder(b);   //  取余
c=a.mod(b);         // a mod b
c=a.abs();           // a的绝对值
c=a.negate();        // a的相反数
c=a.pow(d);           // a的b次幂        d为int型    
c=a.max(b);           //  取a,b中较大的
c=a.min(b);                //  取a,b中较小的
d=a.compareTo(b);    //比较a与b的大小 d=-1小于d=0等于 d=1大于  d为int型
a.equals(b);       //  判断a与b是否相等    相等返回true  不相等返回false  
d=a.intValue();      //       将大数a转换为 int 类型赋值给 d  
e=a.longValue();     //       将大数a转换为  long 类型赋值给 e  
f=a.floatValue();    //       将大数a转换为  float 类型赋值给 f  
g=a.doubleValue();   //       将大数a转换为  double 类型赋值给 g  
s=a.toString();      //     将大数a转换为 String 类型赋值给 s  
<span style="color:#ff0000;">s=a.toPlainString();  //将大数a转换为String类型赋值给s,且不表示为科学计数法</span>  
a=BigInteger.valueOf(e);  // 将 e 以大数形式赋值给大数 a   e只能为long或int  
a=newBigInteger(s, d);  // 将s数字字符串以d进制赋值给大数a如果d=s字符数字的进制则等同于将数字字符串以大数形式赋值给大数a  
String st = Integer.toString(num, base); //把int型num当10进制的数转成base进制数存入st中    (base <= 35).  
int num = Integer.parseInt(st, base); //把st当做base进制,转成10进制的int  
(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).    
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.  
BigInteger a;  
int b;  
Stringc;  
a=cin.nextBigInteger(b);   //以b进制读入一个大数赋值给a  
c=a.toString(b);          // 将大数a以b进制的方式赋给字符串c  
a=newBigInteger(c, b);  //把c 当做“b进制“转为十进制大数赋值给a  

大数高精度求sqrt(n)


BigDecimal one = new BigDecimal(1);  
         BigDecimal two = new BigDecimal(2);  
         BigDecimal three = new BigDecimal(3);  
         BigDecimal five = new BigDecimal(5);  
         BigDecimal l=new BigDecimal(2),r=new BigDecimal(3);  
         for(int i=0; i<1000; ++i)  
         {  
             BigDecimal mid=r.add(l).divide(two);  //因为sqrt(5)是在2到3之间
             if(mid.multiply(mid).compareTo(five)<0)  
             {  
                 l=mid;  
             }  
             else r=mid;  
         }  

一个是 BigDecimal.stripTrailingZeros(),作用是将BigDecimal转化为最简形式(去掉末尾多余的0或小数点)

还有 BigDecimal.toPlainString() ,作用是将BigDecimal转为字符串,因为小数位数过多的话会被输出成科学计数法表示,不希望那样的话就要用到这个方法;

import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;
public class Main
{
	public static void main(String[] args)
	{
		Scanner cin = new Scanner(new BufferedInputStream(System.in)); 
		BigDecimal a,b,c;
		while(cin.hasNext())
		{
			a=cin.nextBigDecimal();
			b=cin.nextBigDecimal();
			
			c=a.add(b);
			c=c.stripTrailingZeros();
			String s=c.toPlainString();
			System.out.println(s);
		//	以上四行也可直接写成 
		//	System.out.println(a.add(b).stripTrailingZeros().toPlainString());
		}}}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的BigDecimal是用于高精度计算的类。它可以在需要更高精度的数值计算时使用,避免了浮点数计算的一些精度问题。BigDecimal提供了大数运算、精确的四舍五入以及各种数值操作方法。 要使用BigDecimal类,首先需要导入java.math包。然后可以使用BigDecimal类的构造方法创建BigDecimal对象,可以传入字符串或其他数值类型作为参数。例如: ```java import java.math.BigDecimal; public class Main { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("5.2"); // 加法 BigDecimal sum = num1.add(num2); System.out.println("Sum: " + sum); // 减法 BigDecimal difference = num1.subtract(num2); System.out.println("Difference: " + difference); // 乘法 BigDecimal product = num1.multiply(num2); System.out.println("Product: " + product); // 除法 BigDecimal quotient = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP); System.out.println("Quotient: " + quotient); } } ``` 上述示例演示了BigDecimal的基本运算,包括加法、减法、乘法和除法。其中,除法使用了setScale方法进行精确的四舍五入,并指定了小数位数和舍入规则。 除了基本运算,BigDecimal还提供了其他一些常用方法,如取绝对值(abs)、取反(negate)、比较大小(compareTo)等。 总之,BigDecimal是Java中用于高精度计算的类,可以避免浮点数计算的精度问题。在需要进行精确计算的场景中,可以使用BigDecimal进行数值操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值