关于java大数的一些操作

本文详细介绍了Java中处理大数的各种方法,包括加减乘除等基本运算、阶乘、幂运算以及大数的比较,并提供了多个实际问题的解决代码示例。
java大数
关于java大数的操作以及编程注意:
1.编程注意:
    (1).建立java工程的步骤:File-->new-->java project -->输入英文名称,点击finish-->打开工程文件-->右击src-->new-->class-->输入同上英文名称,点击finish完成;
    (2).建立工程,注意文件名称要和class名称相同;而且public class Main {  } ;Main 应为class 名称;
    (3).提交java程序的时候注意若不是public class Main{ };则应改为这样再提交;
2.关于java大数的操作:
import java.io.*;
import java.util.*;
import java.math.BigInteger;  //java大数头文件;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin=new Scanner(System.in);      //最先定义输入符为cin;
        int n=cin.nextInt();                     //定义一个整数并输入;
        BigInteger a=cin.nextBigInteger();       //定义一个大数并输入;//注意括号;
        BigInteger b=cin.nextBigInteger();
        while(n-->0)                             //循环n次,也可以用for循环;
        {
            BigInteger ans=BigInteger.ZERO;
            ans=a.add(b);                        //a+b;
            ans=a.substract(b);                  //a-b;
            ans=a.multiply(b);                   //a*b;
            ans=a.divide(b);                     //a/b;
            ans=a.mod(b);                        //a%b;
            
                                                 //如果你想让a与一个常数进行操作,那么你要先对它进行变量化;
            BigInteger x=new BigInteger("4");
            ans=a.mod(x);
            
            int flag=a.compareTo(b);             //比较函数:flag==-1-->小于、flag==0-->等于、flag==1-->大于;
        }
        
        while(cin.hasNext())                     //一直循环;//注意括号;
        {
            System.out.println();                //输出空行;输出函数,自动换行;
            System.out.println(a+"+"+b+"="+ans); //这里的加号代表连接;
            System.out.println("");              //输出函数,双引号内为要输出的字符串;
        }
    }
}

例题:nyoj168 卡特兰数

代码:

package helloo;

import java.io.*;
import java.math.BigInteger;
import java.math.BigDecimal;
import java.util.*;

public class helloo
{
	public static void main(String args[])
	{
		BigInteger a[]=new BigInteger[110];
	    a[0]=new BigInteger("1");
	    a[1]=new BigInteger("1");
	    a[2]=new BigInteger("2");
	    a[3]=new BigInteger("5");
		
		for(int i=4;i<=100;i++)
		{
			int x;
			x=4*i-2;
			BigInteger t=BigInteger.valueOf(x);
			a[i]=t.multiply(a[i-1]);
			x=i+1;
			t=BigInteger.valueOf(x);
			a[i]=a[i].divide(t);
		}
		
		Scanner cin=new Scanner(System.in);
		while(cin.hasNext())
		{
			int n=cin.nextInt();
			if(n==-1)
				break;
			System.out.println(a[n]);
		}
	}
}
java 上编译可以通过,不过提交时要修改一下 helloo--->Main;删除第一行;



java大数模板

/****多组大数相加****/
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1047
代码:
import java.io.*;
import java.util.*;
import java.math.BigInteger;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin=new Scanner(System.in);
        int n=cin.nextInt();
        for(int i=1; i<=n; i++)
        {
            BigInteger ans=BigInteger.ZERO;
            BigInteger m=cin.nextBigInteger();
            while(cin.hasNext())
            {
                if(m.equals(BigInteger.ZERO))
                    break;
                ans=ans.add(m);
                m=cin.nextBigInteger();
            }
            System.out.println(ans);
            if(i!=n)
                System.out.println();
        }
    }
}

/****大数取余****/
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212
import java.io.*;
import java.util.*;
import java.math.BigInteger;


public class Main
{
    public static void main(String args[])
    {
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext())
        {
            BigInteger a=cin.nextBigInteger();
            BigInteger b=cin.nextBigInteger();
            BigInteger ans=a.mod(b);
            System.out.println(ans);
        }
    }
}
 
/****Chinese Girls' Amusement****/
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1313
代码:
import java.io.*;
import java.util.*;
import java.math.BigInteger;

public class Main
{
    public static void main(String args[])
    {
        Scanner cin=new Scanner(System.in);
       
        while(cin.hasNext())
        {
            BigInteger x=new BigInteger("1");
            BigInteger y=new BigInteger("2");
            
            int n=cin.nextInt();
            while(n-->0)
            {
                BigInteger m=cin.nextBigInteger();
                if(m.mod(y).equals(BigInteger.ZERO))
                {
                    m=m.divide(y);
                    if(m.mod(y).equals(BigInteger.ZERO))
                    {
                        m=m.subtract(x);
                        System.out.println(m);
                    }
                    else
                    {
                        m=m.subtract(y);
                        System.out.println(m);
                    }
                }
                else
                {
                    m=m.subtract(x).divide(y);
                    System.out.println(m);
                }
                
                if(n>0)
                    System.out.println();
            }
        }
    }
}

这一道题給坑惨了,这是一道找规律的题目,因为没有找到正确的规律;
规律就是如果n为奇数,k=(n-1)/2; 偶数:再判n/2是奇数 k=n/2-2,偶数k=n/2-1;

加:hdu 1002A+B Problem II http://acm.hdu.edu.cn/showproblem.php?pid=1002 
减:百炼2736 http://bailian.openjudge.cn/practice/2736/ 
乘:百炼2980 http://bailian.openjudge.cn/practice/2980/ 

除:百炼2737 http://bailian.openjudge.cn/practice/2737/ 



以下为转载:http://blog.youkuaiyun.com/niushuai666/article/details/6972991

大数阶乘

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

代码如下:

import java.io.*;
import java.math.BigInteger;
import java.util.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannercin = new Scanner(System.in);  
                   intn = cin.nextInt();
                   BigIntegerans = BigInteger.ONE;
                   for(inti = 1; i <= n; ++i)
                            ans= ans.multiply(BigInteger.valueOf(i));
                   System.out.println(ans);
         }
}

 

棋盘覆盖

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

代码如下:

import java.math.BigInteger;
import java.util.*;
import java.io.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannerin = new Scanner(System.in);
                   inttest = in.nextInt();
                   while(test--> 0)
                   {
                            intn;
                            n= in.nextInt();
                            BigIntegera = new BigInteger("4");
                            for(inti = 1; i < n; ++i)
                                     a= a.multiply(BigInteger.valueOf(4));
                            System.out.println(a.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(3)));
                   }
         }
}

比较大小

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

代码如下:

import java.io.*;
import java.math.BigInteger;
import java.util.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannercin = new Scanner(System.in);  
                   while(cin.hasNext())
                   {
                            BigIntegera = cin.nextBigInteger();
                            BigIntegerb = cin.nextBigInteger();
                            if(a.equals(BigInteger.ZERO)&& b.equals(BigInteger.ZERO))
                                     break;
                            intflag = a.compareTo(b);
                            if(flag== -1)
                                     System.out.println("a<b");
                            elseif(flag == 0)
                                     System.out.println("a==b");
                            else
                                     System.out.println("a>b");
                   }
         }
}

大数加法

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

代码如下:

import java.math.BigInteger;
import java.util.*;
import java.io.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannerin = new Scanner(System.in);
                   intn = in.nextInt();           
                   for(inti = 1; i <= n; ++i)
                   {
                            BigIntegera = in.nextBigInteger();
                            BigIntegerb = in.nextBigInteger();
                            BigIntegerans = a.add(b);
                            System.out.println("Case" + i + ":");
                            System.out.println(a+ " + " + b + " = " +ans);
                   }
         }
}

 

递推求值

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

代码如下:

import java.io.*;
import java.math.BigInteger;
import java.util.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannercin = new Scanner(System.in);  
                   BigIntegera[] = new BigInteger[100];
                   while(cin.hasNext())
                   {
                            for(inti = 0; i <= 2; ++i)
                                     a[i]= cin.nextBigInteger();
                            for(inti = 3; i <= 99; ++i)
                                     a[i]= a[i - 1].add(a[i - 2]).add(a[i - 3]);
                            System.out.println(a[99]);
                   }
         }
}

高精度幂

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

代码如下:

import java.io.*;
import java.math.BigDecimal;
import java.util.*;
 
public class Main
{
         publicstatic void main(String args[])
         {
                   Scannercin = new Scanner(System.in);  
                   while(cin.hasNext())
                   {
                            BigDecimalans = cin.nextBigDecimal();
                            intn = cin.nextInt();
                            Stringres = ans.pow(n).stripTrailingZeros().toPlainString();
                                     //整数去掉小数点和后面的0
                            if(res.startsWith("0"))//去掉前导0
                            {
                                     res= res.substring(1);
                            }
                            System.out.println(res);
                   }
         }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值