java大程序_关于java对于大数处理的相关程序和用法

转自:http://hi.baidu.com/czyuan_acm/blog/item/d0bf7a439d90d21b72f05d69.html1.如果要将一个大数以2进制形式读入 可以使用cin.nextBigInteger(2);

当然也可以使用其他进制方式读入;

2.如果要将一个大数转换成其他进制形式的字符串 使用cin.toString(2);//将它转换成2进制表示的字符串

例程:POJ 2305

import java.io.*;

import java.util.*;

import java.math.*;

public classMain

{

public static void main(String[] args)

{

int b;

BigInteger p,m,ans;

String str ;

Scanner cin = new Scanner (new BufferedInputStream(System.in));

while(cin.hasNext())

{

b=cin.nextInt();

if(b==0)

break;

p=cin.nextBigInteger(b);

m=cin.nextBigInteger(b);

ans=p.mod(m);

str=ans.toString(b);

System.out.println(str);

}

}

}转载:http://blog.csdn.net/niushuai666/article/details/7433119

题目大意:

八进制小数转十进制小数。不能含有后导0

解题思路:

大数问题,JAVA果断水过。

去后导0的用地BigDecimal的stripTrailingZeros,然后使用toPlainString防止高精度数表示成科学计数法(意思就是转换成朴素的字符串)

import java.math.BigDecimal;

import java.util.*;

import java.math.*;

import java.io.*;

public class Main

{

public static void main(String[] args)

{

String a;

BigDecimal eight = new BigDecimal(8);

Scanner cin = new Scanner(System.in);

while(cin.hasNext())

{

a = cin.nextLine();

BigDecimal ans = new BigDecimal(0);

BigDecimal temp = new BigDecimal(1);

for(int i = 2; i < a.length(); ++i)

{

temp = temp.divide(eight);

ans = ans.add(new BigDecimal(a.charAt(i) - '0').multiply(temp));

}

System.out.println(a + " [8] = " + ans.stripTrailingZeros().toPlainString() + " [10]");

}

}

}

HDU-1753 大明A+B【大数相加】

解题思路:

大数相加问题,但是有三种情况:2个整数,1个整数1个小数,2个小数。

这就需要我们单独处理每种情况,而且这道题需要保证没有多余的前导0和后导0,刚开始想到简单了。结果到最后搞了150行才过。悲剧。

这道题的巧妙做法是:把每种情况都转换成2个小数来搞,这样就只有1种情况了。

JAVA则超级轻松水过啊!!!!!!!!150行和20行,郁闷啊。。。。

JAVA,你太强悍了。ORZ

去后导0的用地BigDecimal的stripTrailingZeros,然后使用toPlainString防止高精度数表示成科学计数法(意思就是转换成朴素的字符串)

import java.math.BigDecimal;

import java.util.*;

public class Main

{

public static void main(String[] args)

{

BigDecimal a, b, c;

Scanner cin = new Scanner(System.in);

while(cin.hasNext())

{

a = cin.nextBigDecimal();

b = cin.nextBigDecimal();

c = a.add(b);

if(c.compareTo(BigDecimal.ZERO) == 0)

System.out.println("0");

else

System.out.println(c.stripTrailingZeros().toPlainString());

}

}

}比较两个数的大小

intflag = a.compareTo(b);

if(flag == -1)

System.out.println("a

elseif(flag ==0)

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

else

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

}

高精度幂

代码如下:

import java.io.*;

import java.math.BigDecimal;

import java.util.*;

public class Main

{

public static void main(String args[])

{

Scanner cin = new Scanner(System.in);

while(cin.hasNext())

{

BigDecimal ans = cin.nextBigDecimal();

int n = cin.nextInt();

String res = ans.pow(n).stripTrailingZeros().toPlainString(); //整数去掉小数点和后面的0

if(res.startsWith("0")) //去掉前导0

{

res = res.substring(1);

}

System.out.println(res);

}

}

}

2012-04-11

15:27 483人阅读 评论(1)

解题思路:

JAVA果断水过,看别人用C++写了100+行,而且稠的很。。。

我的一共才20行,还有头文件什么的。。。

不得不说,JAVA高精度无敌啊。

import java.math.BigDecimal;

import java.util.*;

public class Main

{

public static void main(String[] args)

{

BigDecimal a, b, c;

Scanner cin = new Scanner(System.in);

while(cin.hasNext())

{

a = cin.nextBigDecimal();

b = cin.nextBigDecimal();

c = a.subtract(b);

if(c.compareTo(BigDecimal.ZERO) == 0)

System.out.println("YES");

else

System.out.println("NO");

}

}

}以上出第一个外均为转自:http://blog.csdn.net/niushuai666/article/category/929606

转载:http://blog.csdn.net/zhengnanlee/article/details/12575353

a9e7a6aa8d7f83360de5ccb51f32f172.png

import java.math.*;

import java.util.*;

public class Main

{

public static void main(String[] args)

{

Scanner cin = new Scanner(System.in);

while(cin.hasNext())

{

Integer n;

n = cin.nextInt();

long a[] = new long [1005];

BigInteger b[] = new BigInteger [1005];

BigInteger c[] = new BigInteger [1005];

long Maxx = 0;

for(int i = 0; i < n; i++)

{

a[i] = cin.nextLong();

if(a[i]>Maxx) Maxx = a[i];

}

int k = 0;

for(int i = 0; i < n; i++)

{

if(a[i] == Maxx) continue;

else

{

b[i] = BigInteger.valueOf(Maxx * a[i]);

c[i] = BigInteger.valueOf(2 * (Maxx - a[i]));

k = i;

}

}

BigInteger t = BigInteger.ONE;

for(int i = 0; i < n; i++)

{

if (a[i]==Maxx) continue;

t = b[k].multiply(c[i]).gcd(b[i].multiply(c[k]));

b[k] = b[k].multiply(c[i]).multiply(b[i].multiply(c[k])).divide(t);

c[k] = c[k].multiply(c[i]);

t = b[k].gcd(c[k]);

b[k] = b[k].divide(t);

c[k] = c[k].divide(t);

}

System.out.println(b[k]+" "+c[k]);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值