用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);
}
}
}