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

<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19px; background-color: rgb(245, 245, 245);">转自:http://hi.baidu.com/czyuan_acm/blog/item/d0bf7a439d90d21b72f05d69.html</span>
1.如果要将一个大数以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());
		}
	}
}
比较两个数的大小

  1.  int flag = a.compareTo(b);  
  2.             if(flag == -1)  
  3.                 System.out.println("a<b");  
  4.             else if(flag == 0)  
  5.                 System.out.println("a==b");  
  6.             else  
  7.                 System.out.println("a>b");  
  8.         }  

高精度幂

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=155

代码如下:

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

NYOJ-524 A-B Problem【高精度】

分类: JAVA 483人阅读 评论(1) 收藏 举报

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=524

解题思路:

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



posted @ 2014-10-21 12:04  HYDhyd  阅读(131)  评论(0编辑  收藏  举报