hdu 5973 Game of Taking Stones java大数+根号5的精度

本文探讨了一道威佐夫博弈的算法题目,特别关注于使用Java进行大数运算时的精度问题。通过具体示例展示了如何利用BigDecimal类来避免浮点数运算中的精度丢失,并提供了一个完整的代码实现。

威佐夫博弈的模板题

但是数据太大 用到java大数 还需要注意精度问题 

没具体数就复制了下面的几行

根号5的10000位

因为package  wa了好几发

import java.math.*;
import java.text.*;
import java.util.*;

public class Main {

	public static void main(String[] args) {
		  Scanner cin=new Scanner(System.in);
	        while(cin.hasNextBigDecimal())
	        {
	        	BigDecimal a=cin.nextBigDecimal();
	        	BigDecimal b=cin.nextBigDecimal();
	        	 BigDecimal c,m;
	        	 if(a.compareTo(b)>0)
	        	 {
	        		 c=a;
	        		 a=b;
	        		 b=c;
	        	 } 
	        	 c=b.subtract(a);
	        	 
	             //double o=(1+Math.sqrt(5.0))/2;
	        	 
	            
	             BigDecimal h = new BigDecimal("2");
	            
	             BigDecimal zz = new BigDecimal("2.23606797749978969640917366873127623544061835961152572427089724541052092563780489941441440837878227496950817615077378350425326772444707386358636012153345270886677817319187916581127664532263985658053576135041753378500342339241406444208643253909725259262722887629951740244068161177590890949849237139072972889848208864154268989409913169357701974867888442508975413295618317692149997742480153043411503595766833251249881517813940800056242085524354223555610630634282023409333198293395974635227120134174961420263590473788550438968706113566004575713995659556695691756457822195250006053923123400500928676487552972205676625366607448585350526233067849463342224231763727702663240768010444331582573350589309813622634319868647194698997018081895242644596203452214119223291259819632581110417049580704812040345599494350685555185557251238864165501026243631257102444961878942468290340447471611545572320173767659046091852957560357");
                zz=zz.add(BigDecimal.ONE);
                zz=zz.divide(h);
	            //System.out.println(zz);
	        	// BigDecimal d=new BigDecimal(o);
	        	 m=zz.multiply(c);
	        	// System.out.println(m);
	        	m=m.setScale(0,BigDecimal.ROUND_DOWN);
	        	// System.out.println(m);
                 if(m.compareTo(a)==0)
	        	 System.out.println("0");
                 else
                 System.out.println("1");

	}

}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值