最近用Java做了几道高精度的题

6 篇文章 0 订阅

用Java做高精度的题,和用C++相比,简单了很多;

一个“大数”或者一个“大小数”在Java中就是一个封装完备的对象;

关键掌握:


Scanner的用法:Scanner cin=new Scanner(System.in);

int x;

BigInteger big;

String str;

String常量转换到 BigInteger:     big=new BigInteger("0");

int变量转换到 BigInteger:          big=BigInteger.valueOf(x);

BigInteger转换到String常量:      str=big.toString();        //带有指数字段,也就是科学记数法,比如:1.23E+4

BigInteger转换到“朴素的“String: str=big.toPlainSting();  //不带有指数字段,纯正的高精度,   比如:12300

BigInteger去掉尾部多余的”0“:     big=big.stripTrailingZero() //如果一个小数后面有多余的”0“,则去掉;如果是整数结尾有”0“,则变成科学记数法;(显然是需要保持等值)


BigInteger类,BigDecimal类很多关键运算都已经封装好了:

点击打开链接

String类也是一个相当完备的类:

点击打开链接

下以 提供两个例子:

Hdu1313:

点击打开链接

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

public class Main
{
	public static void main(String args[])
	{
		Scanner cin=new Scanner(System.in);
		BigInteger big;
		while(cin.hasNext())
		{
			boolean flag=true;
			String str=cin.nextLine();
			int len=str.length();
			
			for(int i=1;i<=len && flag; ++i)
			{
				big=new BigInteger(str);
				big=big.multiply(BigInteger.valueOf(i));
				String str2=big.toString();
				
				while(str2.length()<len)
					str2="0"+str2;
				
				str2=str2+str2;
				
				if(str2.indexOf(str)==-1)
					flag=false;
			}
			
			if(flag)
				System.out.println(str+" is cyclic");
			else
				System.out.println(str+" is not cyclic");
		}	
	}
}


hdu1753:

点击打开链接

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

public class Main
{
	public static void main(String args[])
	{
		Scanner cin=new Scanner(System.in);
		BigDecimal a, b;
		while(cin.hasNext())
		{
			a=cin.nextBigDecimal();
			b=cin.nextBigDecimal();
			a=a.add(b);
			String ans=a.stripTrailingZeros().toPlainString();
			System.out.println(ans);
		}
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值