接下来以HDOJ 1002为例,简单介绍一下如何用java秒杀"简单"大数题(题目自己去看,代码如下):

import java.io.*;
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] argc)
{
Scanner cin=new Scanner(System.in);
BigInteger a,b,c;
int t,id=1;
t=cin.nextInt();
while(t--!=0)//java不会进行默认强转,所以0和非0不会编程false和true
{
a=cin.nextBigInteger();
b=cin.nextBigInteger();
c=a.add(b);
System.out.println("Case "+id+":");
System.out.println(a+" + "+b+" = "+c);//"+"号运算符如果对字符串处理会把非字符创转化成字符串
if(t!=0) System.out.println();//输出空喊
id++;
}
}
}

为了方便起见,一下贴出BigInteger,BigDecimal和String类最常用的成员函数:

Bignteger

返回值 成员函数

BigInteger add(BigInteger val)

返回其值为 (this + val) 的 BigInteger。

BigInteger subtract(BigInteger val)

返回其值为 (this - val) 的 BigInteger。

BigInteger multiply(BigInteger val)

返回其值为 (this * val) 的 BigInteger。

BigInteger divide(BigInteger val)

返回其值为 (this / val) 的 BigInteger。

BigInteger mod(BigInteger m)

返回其值为 (this mod m) 的 BigInteger。

int compareTo(BigInteger val)

将此 BigInteger 与指定的 BigInteger 进行比较。

如果和val相等返回0,小于返回-1,大于返回1

BigInteger pow(int exponent)

返回其值为 (this exponent) 的 BigInteger。

String toString()

返回此 BigInteger 的十进制字符串表示形式。

String toString(int radix)

返回此 BigInteger 的给定基数的字符串表示形式。

static BigInteger valueOf(long val)

返回其值等于指定 long 的值的 BigInteger。

BigInteger gcd(BigInteger val)

返回一个 BigInteger,其值是 abs(this) 和 abs(val) 的最大公约数。

BigInteger abs()

返回其值是此 BigInteger 的绝对值的 BigInteger。

int hashCode()

返回此 BigInteger 的哈希码。

boolean isProbablePrime(int certainty)

如果此 BigInteger 可能为素数,则返回 true,如果它一定为合数,则返回 false。

BigInteger nextProbablePrime()

返回大于此 BigInteger 的可能为素数的第一个整数。

int signum()

返回此 BigInteger 的正负号函数。

除了以上成员函数,BigInteger还有几个非常常用的属性

BigInteger.ZERO BigInteger 的常量 0。

BigInteger.ONE BigInteger 的常量 1。

BigInteger.TEN BigInteger 的常量 10。

BigDecimal

返回值 成员函数

BigDecimal add(BigDecimal augend)

返回一个 BigDecimal,其值为 (this + augend)。

BigDecimal subtract(BigDecimal subtrahend)

返回一个 BigDecimal,其值为 (this - subtrahend)。

BigDecimal multiply(BigDecimal multiplicand)

返回一个 BigDecimal,其值为 (this × multiplicand).

BigDecimal divide(BigDecimal divisor)

返回一个 BigDecimal,其值为 (this / divisor).

BigDecimal pow(int n)

返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。

int compareTo(BigDecimal val)

将此 BigDecimal 与指定的 BigDecimal 比较。

static BigDecimal valueOf(double val)

使用 Double.toString(double) 方法提供的 double 规范的字符串

表示形式将 double 转换为 BigDecimal。

BigDecimal stripTrailingZeros()

返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。

String toPlainString()

返回不带指数字段的此 BigDecimal 的字符串表示形式。

String toString()

返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。

BigDecimal abs()

返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()。

int hashCode()

返回此 BigDecimal 的哈希码。

int signum()

返回此 BigDecimal 的正负号函数。

BigInteger的三个重要属性,BigDecimal同样也有,这里就不再复述了.

String

返回值 成员函数

char charAt(int index)

返回指定索引处的 char 值。

String substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。

int length()

返回此字符串的长度。

String toLowerCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String toUpperCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

int compareTo(String anotherString)

按字典顺序比较两个字符串。

String concat(String str)

将指定字符串联到此字符串的结尾。

boolean contains(CharSequence s)

当且仅当此字符串包含 char 值的指定序列时,才返回 true。

int hashCode()

返回此字符串的哈希码。

boolean startsWith(String prefix)

测试此字符串是否以指定的前缀开始。

boolean endsWith(String suffix)

测试此字符串是否以指定的后缀结束。

String trim()

返回字符串的副本,忽略前导空白和尾部空白。

四.样例

其实java的API远不止这些,以上列举出来的都是用的比较多的几个.最后附上HDU上几道"简单"大数题的代码,供参考

//1753
import java.io.*;
import java.math.*;
import java.util.*;
import java.text.*;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(new BufferedInputStream(System.in));
BigDecimal a,b,c;
while(cin.hasNextBigDecimal())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
c=b.add(a);
String s=c.toString();
int i,j;
boolean flag=false;
for(i=0;i=0;j--)
if(s.charAt(j-1)!='0') break;
if(s.charAt(j-1)=='.') j--;
s=s.substring(0,j);
}
System.out.println(s);
}
}
}
//1042
import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
public static void main(String[] argv)
{
BigInteger n,i,ans;
Scanner cin=new Scanner(System.in);
while(cin.hasNextBigInteger())
{
n=cin.nextBigInteger();
ans=BigInteger.ONE;
for(i=BigInteger.ONE;i.compareTo(n)<=0;i=i.add(BigInteger.ONE))
ans=ans.multiply(i);
System.out.println(ans);
}
}
}
//1063
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] argv){
Scanner cin=new Scanner(System.in);
BigDecimal R;
String s;
int n;
while(cin.hasNextBigDecimal()){
R=cin.nextBigDecimal();
n=cin.nextInt();
R=R.pow(n);
s=R.stripTrailingZeros().toPlainString();
if(s.charAt(0)=='0') s=s.substring(1);
System.out.println(s);
}
}
}
//1715
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] argc){
Scanner cin=new Scanner(System.in);
int i,j,k,n;
BigInteger fib[]=new BigInteger[1001];
fib[0]=BigInteger.ZERO;
fib[1]=BigInteger.ONE;
for(i=2;i<=1000;i++)
fib[i]=fib[i-1].add(fib[i-2]);
n=cin.nextInt();
while((n--)!=0)
{
i=cin.nextInt();
System.out.println(fib[i]);
}
}
}
//1316
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] argc){
Scanner cin=new Scanner(System.in);
int i,count;
BigInteger a,b;
BigInteger fib[]=new BigInteger[601];
fib[1]=BigInteger.valueOf(1);
fib[2]=BigInteger.valueOf(2);
for(i=3;i<=600;i++)
fib[i]=fib[i-1].add(fib[i-2]);
while(true){
a=cin.nextBigInteger();
b=cin.nextBigInteger();
if(a.add(b).compareTo(BigInteger.ZERO)==0) break;
count=0;
i=1;
while(fib[i].compareTo(a)<0) i++;
while(fib[i].compareTo(b)<=0){
i++;
count++;
}
System.out.println(count);
}
}
}
//1040
import java.io.*;
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] argv){
Scanner cin=new Scanner(System.in);
int times,n,i,j,k;
int D[]=new int[1005];
times=cin.nextInt();
while(times--!=0)
{
n=cin.nextInt();
for(i=0;i=0;i--,k++)
{
if(s.charAt(i)=='1')
{
if(flag)
{
System.out.print(k);
flag=false;
}
else
{
System.out.print(" "+k);
}
}
}
System.out.println();
}
}
}