java 大数类 总结 整数小数(BigInteger和BigDecimal)

24 篇文章 0 订阅
7 篇文章 0 订阅

java大法好,退c保平安

看完java的大数类,决定重新做一下之前大数的题

然后再整理一下吧= =


整数部分(BigInterger)

hdu 1001 求从1加到n,n可以很大

//package BigInteger1;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		while(cin.hasNextLong())
		{
			long n = cin.nextLong();
		BigInteger mul = BigInteger.ZERO;
		for(long i=0;i<=n;i++)
			mul=mul.add(BigInteger.valueOf(i));
         System.out.println(mul);
         System.out.println();
	    }
	}

}
hdu 1002 大整数相加

import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		int test = cin.nextInt();
		for(int tt=1;tt<=test;tt++)
		{
			BigInteger a = cin.nextBigInteger();
			BigInteger b = cin.nextBigInteger();
			System.out.println("Case "+tt+":");//这里不断开,用\n会报错??
			System.out.println(a+" + "+b+" = "+a.add(b));
        if(tt!=test)
			System.out.println();
	    }
	}

}

hdu 1041 递推公式+大数(如a[i]=a[i-1]+2*a[i-2])

import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		BigInteger [] a=new BigInteger [1005];
		a[1]=BigInteger.ZERO;
		a[2]=BigInteger.ONE;
		a[3]=a[2];
		a[4]=a[2].add(a[2].add(a[2]));
		for(int i=4;i<=1000;i++)
		{
			a[i]=a[i-1].add(a[i-2].add(a[i-2]));
		}
			while(cin.hasNext()){//打表
			int n = cin.nextInt();
			System.out.println(a[n]);
		}
	}

}

hdu 1042 n!

import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		while(cin.hasNext())
		{
		int n = cin.nextInt();
		BigInteger mul = BigInteger.ONE;
		for(int i=1;i<=n;i++)
			mul=mul.multiply(BigInteger.valueOf(i));
         System.out.println(mul);
	    }
	}

}

还有高精度幂:(BigDecimal)

hdu 1063 小数的n次方

import java.io.*;
import java.math.BigDecimal;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin = new Scanner(System.in);
		while(cin.hasNextBigDecimal())
		{
			BigDecimal ans = cin.nextBigDecimal();
			int n=cin.nextInt();
			
			String res = ans.pow(n).stripTrailingZeros().toPlainString();//整数去掉小数点+后面的0
			 if(res.startsWith("0")) //去掉前导0  
	            {  
	                res = res.substring(1);  
	            }  
	            System.out.println(res); 
//	  或者          if(res.charAt(0)=='0')
//	            	res = res.substring(1);
	            
	        //ans=ans.pow(n);
			//ans =ans.pow(n).stripTrailingZeros();整数去掉小数点
			//System.out.println(ans); 
			}
	}
}

小数相加:

hdu1753(都要注意去后置零,和整数去点,如果题目要求再去前置零用if

package teat1;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin = new Scanner(System.in);
		while(cin.hasNextBigDecimal())
		{
			BigDecimal a= cin.nextBigDecimal();
			BigDecimal b = cin.nextBigDecimal();
			String ans=a.add(b).stripTrailingZeros().toPlainString();
			System.out.println(ans);
			}
	}
}


整理一下:(随便写的

对于整数的题(先不看BigDecimal

import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {

	public static void main(String[] args) {
//声明和赋值
		Scanner cin=new Scanner(System.in);//在import java.util.*;包中,
		//实现了大整数输入的方法   cin.nextBigInteger()
		
		BigInteger big1=BigInteger.ZERO;//0 声明一个大整数并常数值赋值0
		BigInteger big2=BigInteger.ONE;//1
		BigInteger big3=BigInteger.TEN;//10
		
		BigInteger big4 =new BigInteger("1000");//赋除了0,1,10之外的常数值的方法一
		BigInteger big5= BigInteger.valueOf(1000);//没有new赋除了之外的常数值的方法二
		//BigInteger bi1 =  new BigInteger(55,new Random());  生成一个个随机的大整数
		
		BigInteger [] a=new BigInteger [1005];//声明大整数数组,并赋值
		a[1]=BigInteger.ZERO;
		a[2]=BigInteger.ONE;
		a[3]=a[2];
		a[4]= BigInteger.valueOf(3);//a[4]=a[2].add(a[2].add(a[2]));
		int n = cin.nextInt();
		System.out.println(a[n]);
		
//手动输入
		int n1=cin.nextInt();//输入一个int型的n1
		long n2=cin.nextLong();//输入一个long的n2
		
		BigInteger n3 = cin.nextBigInteger();//声明一个大数,并手动输入这个值
		BigInteger n4 = cin.nextBigInteger();
		
//case处理
		while(cin.hasNext())
		{
			//cin.hasNext()输入结束同c++里的while(scanf("%d",&n)!=EOF)
		}
		while(cin.hasNextLong())
		{
			//同上,这个输入的是long类型时
		}
		int test = cin.nextInt();
		while(test-- >0)
		{
			//同c++里的while(scanf(test--))
		}
		for(int tt=4;tt<=test;tt++)
	    {
			//需要记录case++时候
			System.out.println("Case "+tt+":");//这里不断开,用\n会报错??
			System.out.println(big1+" + "+big2+" = "+big1.add(big2));
		}
//四则运算及其他
		System.out.println(n3.add(n4));//n3+n4
		System.out.println(n3.subtract(n4));//n3-n4
		System.out.println(n3.multiply(n4));//n3*n4
		System.out.println(n3.divide(n4));//n3/n4(两个大整数,整除的商
		System.out.println(n3.remainder(n4));//n3%n4(两个大整数,取余数
		System.out.println(n3.mod(n4));//同上
		System.out.println(n3.gcd(n4));//n3和n4的最大公约数
		System.out.println(n3.abs());//n3取绝对值
		System.out.println(n3.negate());//n3取相反数
		System.out.println(n3.min(n4));//n3
		System.out.println(n3.max(n4));//n3
		System.out.println(n3.abs());//n3取绝对值
		System.out.println(n3.pow(2));//n3的2次方(指数
        System.out.println(n3.toString(2)); // 转化为 x 的 n进制;
        System.out.println(n3.compareTo(n4)==0); //x和y进行比较
		  if(big1.compareTo(big2) > 0)  
			  
              System.out.println("bd1 is greater than bd2");  
 
          else if(big1.compareTo(big2) == 0)  
 
              System.out.println("bd1 is equal to bd2");  
 
          else if(big1.compareTo(big2) < 0)  
 
              System.out.println("bd1 is lower than bd2");  
		
	}
}


这些留着以后看:


BigInteger(byte[])

把一个包含着(正负号)整数的二进制补码字节数组翻译为 BigInteger 

BigInteger(int, byte[])

把一个整数的 sign-magnitude 表示法翻译为 BigInteger 

BigInteger(int, int, Random)

返回有指定 bitLength(可能是素数)的随机选择的 BigInter 

BigInteger(int, Random)

返回一个随机数,均匀分布 [0, 2**numBits - 1] 之间
(
假设由 rndSrc 提供一个公平的随机源

BigInteger(String)

把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个十进制数字序列。

BigInteger(String, int)

把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个指定进制的数字序列。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值