大整数运算java

本文介绍了使用Java的BigInteger和BigDecimal进行大整数运算的实践过程。作者强调了亲手编码的重要性,并指出在创建这两个类的对象时需要注意的细节。示例程序包括加减乘除、平方以及比较操作,展示了这两个类的功能和使用便利性。

今天终于用java写了大整数运算的程序,真的是太不可思议了,java自带的BigInteger还有BigDecimal真的是好用啊(觉得有必要写下来)

其实也是看到网上的一些代码,然后自己手敲一遍,不管啥程序一定要自己手敲一遍真的管用!!!!!!!


其中有一个要注意的地方就是:

BigInteger:BigInteger bi = new BigInteger("100");或:BigInteger bi = BigInteger.valueOf(100);

数组定义与基本类型类似.

BigDecimal:BigDecimal bd = new BigDecimal(100);或:BigDecimal bd = BigDecimal.valueOf(100);

BigDecimal的构造函数比BigInteger多一些,感觉用起来更方便些,比如这样定义就是错误的:BigInteger bi = new BigInteger(100);//注意括号内的不同



下面是java程序,也是一个小的比较:

先是BigDecimal的程序:

package biginterger;
import java.math.BigDecimal;
public class BigDecimalDemo {
	public static void main(String args[]){
		 System.out.println("构造两个BigDecimal对象: ");  
	        //用char[]数组创建BigDecimal对象,第二个参数为位移offset,  
	        //第三个参数指定长度 
		 BigDecimal bd1 = new BigDecimal("3464656776868432998434".toCharArray(),2,15);  
	     System.out.println("bd1 = " + bd1); 
		 
		 //也可以直接给bd1赋初值
	    // BigDecimal bd1= new BigDecimal(200000000000000.0F);
	    // System.out.println("bd1=:"+bd1);
	     
	     //用double 类型创建BigDecimal对象;
	     BigDecimal bd2= new BigDecimal(123456789456123.0F);
	     System.out.println("bd2=:"+bd2);
	     
	     //加
	     System.out.println("bd1+bd2=:"+bd1.add(bd2));
	     //减
	     System.out.println("bd1-bd2=:"+bd1.subtract(bd2));
	     //乘
	     System.out.println("bd1*bd2=:"+bd1.multiply(bd2));
	     //指数运算
	     System.out.println("bd1的2次方:"+bd1.pow(2));
	     //取商的整数部分
	     System.out.println("bd1/bd2的整数商:"+bd1.divideToIntegralValue(bd2));
	     //取余数
	     System.out.println("bd1/bd2的余数:"+bd1.divideAndRemainder(bd2));
	     //取商和余
	     System.out.println("bd1/bd2的商和余=:"+bd1.divideAndRemainder(bd2)[0]+"---"+bd1.divideAndRemainder(bd2)[1]);
	     System.out.println("bd1/bd2的商和余=:"+bd1.divideAndRemainder(bd2)+"---"+bd1.divideAndRemainder(bd2));
	     
	     //比较大小,也可以用max()和main()
	     if(bd1.compareTo(bd2) > 0)  
	    	  
             System.out.println("bd1 is greater than bd2");  

         else if(bd1.compareTo(bd2) == 0)  

             System.out.println("bd1 is equal to bd2");  

         else if(bd1.compareTo(bd2) < 0)  

             System.out.println("bd1 is lower than bd2");  
	     //末位数据精度
	     System.out.println("bd1的末位数据精度:"+bd1.ulp());
	}

}
 再贴个运行结果,便于理解

构造两个BigDecimal对象: 
bd1 = 646567768684329
bd2=:123456788103168
bd1+bd2=:770024556787497
bd1-bd2=:523110980581161
bd1*bd2=:79823180012799347834876854272
bd1的2次方:418049879501431972683650180241
bd1/bd2的整数商:5
bd1/bd2的余数:[Ljava.math.BigDecimal;@6a2437ef
bd1/bd2的商和余=:5---29283828168489
bd1/bd2的商和余=:[Ljava.math.BigDecimal;@6fd46259---[Ljava.math.BigDecimal;@6084fa6a
bd1 is greater than bd2
bd1的末位数据精度:1



接着是BigInteger的:

package biginterger;
import java.math.BigInteger;
import java.util.Random;
public class BigInterger {
  public static void main(String args[]){
	 System.out.println("构造两个BigInteger对象:");
	 ////BigInteger(int numBits, Random rnd)   
     //构造一个随机生成的 BigInteger,它是在 0 到 (2^numBits - 1)(包括)范围内均匀分布的值 
	 BigInteger bi1 = new BigInteger(55,new Random());//注意这里是用java特有的Bigtrger函数,并不是主类的名称,这里的公共类名用的太不易区分了;
	 System.out.println("bi1=:"+bi1);
	 
	//BigInteger(byte[] val)   
     //将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger。  
	 BigInteger bi2 = new BigInteger(new byte []{3,2,3});
	System.out.println("bi2=:"+bi2);
	 
	 //或者是直接创建证书对象bi1和bi2
	 //BigInteger bi1 = new BigInteger("500");
	 //BigInteger bi2 = new BigInteger("123");
	 
	 
	 //加
	 System.out.println("bi1+bi2=:"+bi1.add(bi2));
	 //减
	 System.out.println("bi1-bi2=:"+bi1.subtract(bi2));
	 //乘
	 System.out.println("bi1*bi2=:"+bi1.multiply(bi2));
	 //指数运算
	 System.out.println("bi2的2次方=:"+bi2.pow(2));
	 //整数商
	 System.out.println("bi1/bi2的整数商=:"+bi1.divide(bi2));
	 //余数
	 System.out.println("bi1/bi2的余数=:"+bi1.remainder(bi2));
	 //整数商+余数
	 System.out.println("bi1/bi2=:"+bi1.divideAndRemainder(bi2)[0]+"---"+bi1.divideAndRemainder(bi2)[1]);
	 
	 //比较大小,也可以用max()和min();
	 if(bi1.compareTo(bi2)>0){
		 System.out.println("bi1 is greater than bi2");
	 }
	 else if(bi1.compareTo(bi2)==0)
		 System.out.println("bi1 is equal to  bi2");
	 
	 else if(bi1.compareTo(bi2) < 0)  
		  
         System.out.println("bi1 is lower than bi2");  
	 //返回相反数
	 BigInteger bi3 =bi1.negate();
	 System.out.println("bi1的相反数"+bi3);
	 //返回绝对值
	 System.out.println("bi1的绝对值:"+bi3.abs());
  }
}
同样也是运行结果:
构造两个BigInteger对象:
bi1=:7102478387610070
bi2=:197123
bi1+bi2=:7102478387807193
bi1-bi2=:7102478387412947
bi1*bi2=:1400061847200859828610
bi2的2次方=:38857477129
bi1/bi2的整数商=:36030693463
bi1/bi2的余数=:103121
bi1/bi2=:36030693463---103121
bi1 is greater than bi2
bi1的相反数-7102478387610070
bi1的绝对值:7102478387610070

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值