java处理大数_Java大数处理 - osc_taaj0nlw的个人空间 - OSCHINA - 中文开源技术交流社区...

以前整理过有关Java的基本知识,也写了几个有关java的题目,不过发现不够完善,现在重新整合一下。

1.Java的输入与输出

java的输入是先定义一个scanner,然后用这个进行输入,并且每一种输入都有相应的输入函数,具体如下:

public classMain

{public static voidmain(String[] args)

{

Scanner cin= new Scanner ( System.in);inta;doubleb;

BigInteger c;

String st;

a=cin.nextInt();

b=cin.nextDouble();

c=cin.nextBigInteger();

d=cin.nextLine();//每种类型都有相应的输入函数.

}

}

Java的输出相较于输入来说就简单一些了。

System.out.println(a + " " +b);

System.out.printf("%d %10.5f\n", a, b);/*规格化的输出:

函数:这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.*/DecimalFormat fd= new DecimalFormat("#.00#");

DecimalFormat gd= new DecimalFormat("0.000");

System.out.println("x =" +fd.format(x));

System.out.println("x =" + gd.format(x));

2.大数部分

java支持大数的操作,其中也是由具体函数实现的。看下面的例子:

int a = 123, b = 456;

BigInteger x, y, z, ans;

x= BigInteger.valueOf(a);//转换

y =BigInteger.valueOf(b);

ans=x.add(y);

ans=x.divide(y);

ans=x.mod(y);if (ans.compareTo(x) == 0)//比较

System.out.println("相等");

这里就写出了int型转换成大数型以及加减乘除比较的基本操作。其中函数原型如下:

BigInteger add(BigInteger other)

BigInteger subtract(BigInteger other)

BigInteger multiply(BigInteger other)

BigInteger divide(BigInteger other)

BigInteger mod(BigInteger other)intcompareTo(BigInteger other)static BigInteger valueOf(longx)

这是大整数的操作,其中还有一个数据类型为:BigDecimal,表示小数,操作与以上相同。

3.格式化输出:

以前做题遇到过这样的情况,如何去掉末尾的0,有一个具体的函数,stripTrailingZeros()函数就是用于去除末尾多余的0的,但是此时程序的输出为科学记数法例如: 1E+2。解决的方法很简单,如果想要避免输出科学计数法的字符串,我们要用toPlainString()函数代替toString()。如:System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());此时程序的输出就为 100。具体实现:

Scanner in=newScanner (System.in);

BigDecimal a,b;while(in.hasNext())

{

a=in.nextBigDecimal();

b=in.nextBigDecimal();

System.out.println(a.add(b).stripTrailingZeros().toPlainString());

}

4.具体实例:

HDU - 1042:计算阶乘:

import java.io.*;importjava.math.BigInteger;import java.util.*;public class Main//注意在oj提交是要用Main

{public static voidmain(String[] args)

{

Scanner in=newScanner (System.in);intn;while(in.hasNext())

{

n=in.nextInt();

BigInteger sum=BigInteger.valueOf(1);for(int i=1;i<=n;i++)

sum=sum.multiply(BigInteger.valueOf(i));

System.out.println(sum);

}

}

}

POJ1001 计算a^b 注意是小数

import java.io.*;importjava.math.BigDecimal;importjava.math.BigInteger;import java.util.*;public class Main//注意在oj提交是要用Main

{public static voidmain(String[] args)

{

Scanner in=newScanner (System.in);intn;

BigDecimal a,b;while(in.hasNext())

{

b=BigDecimal.valueOf(1);

a=in.nextBigDecimal();

n=in.nextInt();for(int i=0;i

{

b=b.multiply(a);

}

String s=b.stripTrailingZeros().toPlainString();if(s.startsWith("0"))

s=s.substring(1);

System.out.println(s);

}

}

}

HDU - 1753  计算A+B 保留最简形式

import java.io.*;importjava.math.BigDecimal;importjava.math.BigInteger;import java.util.*;public class Main//注意在oj提交是要用Main

{public static voidmain(String[] args)

{

Scanner in=newScanner (System.in);

BigDecimal a,b;while(in.hasNext())

{

a=in.nextBigDecimal();

b=in.nextBigDecimal();

System.out.println(a.add(b).stripTrailingZeros().toPlainString());

}

}

}

UVA 10007:计算卡特兰数

importjava.math.BigInteger;importjava.util.Scanner;public classMain {public static voidmain(String[] args) {//TODO Auto-generated method stub

Scanner input = newScanner(System.in);

BigInteger []k= new BigInteger[1100];

k[0] = BigInteger.valueOf(1);for(int j=1;j<310;j++)

{

k[j]=k[j-1].multiply(BigInteger.valueOf(4*j-2)).divide(BigInteger.valueOf(j+1));

}while (true)

{int times=input.nextInt();

BigInteger sum=BigInteger.valueOf(1);if(times!=0)

{for(int i=1;i<=times;i++)

sum=sum.multiply(BigInteger.valueOf(i));

System.out.println(sum.multiply(k[times]));

}else{break;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值