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



  • 相关阅读:
    java学习之实例变量初始化
    rip中的连续子网以及不连续子网
    扫描工具
    WScript.SendKeys()的sendkeys发送组合键以及特殊字符
    sql 查询包含字符的数量统计
    leetcode题1Two sum 练习
    vs 2015密钥
    前端 边界圆角
    前端 字体样式
    前端 高级选择器 伪类选择器
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410568.html
Copyright © 2020-2023  润新知