java大数专题

HDU 1002 大数加减

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

public class Main 
{
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		int t=cin.nextInt();
		for(int i=1;i<=t;i++)
		{
			BigInteger a=cin.nextBigInteger();
			BigInteger b=cin.nextBigInteger();
			BigInteger c=a.add(b);
			System.out.println("Case "+i+":");
			System.out.println(a+" + "+b+" = "+c);
			if(i!=t) System.out.println("");
		}
	}
}


HDU 1042 大数相乘

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

public class Main 
{
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		BigInteger n,i,sum;
		while(cin.hasNextBigInteger())
		{
			n=cin.nextBigInteger();
			sum=BigInteger.ONE;
			i=BigInteger.valueOf(2);
			while(i.compareTo(n)<=0)
			{
				sum=sum.multiply(i);
				i=i.add(BigInteger.ONE);
			}
			System.out.println(sum);
		}
	}
}

HDU 1047 大数相乘

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

public class Main 
{
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		while(cin.hasNextBigInteger())
		{
			int t=cin.nextInt();
			while(t-->0)
			{
				boolean flag=true;
				BigInteger sum=BigInteger.ZERO;
				while(flag)
				{
					BigInteger a=cin.nextBigInteger();
					if(a.compareTo(BigInteger.ZERO)==0) flag=false;
					else sum=sum.add(a);
				}
				System.out.println(sum);
				if(t!=0) System.out.println("");
			}
		}
	}
}

HDU 1063 大数幂与大数转换成字符串的处理

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

public class Main 
{
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		while(cin.hasNextBigDecimal())
		{
			BigDecimal p=cin.nextBigDecimal();
			int n=cin.nextInt();
			p=p.pow(n);
			p=p.stripTrailingZeros(); //去掉后倒0
			String s=p.toPlainString(); //不让其变成科学计数法的表示法,变成一般的小数表示
			if(s.startsWith("0.")) s=s.substring(1); //与前导的字符串比较
			System.out.println(s);
		}
	}
}

HDU 1753 与上一题一样,去掉后导0,然后如果小于1,把前导0也去掉。

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

public class Main 
{
	
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		BigDecimal a,b;
		while(cin.hasNextBigDecimal())
		{
			a=cin.nextBigDecimal();
			b=cin.nextBigDecimal();
			a=a.add(b);
			a=a.stripTrailingZeros();
			String str=a.toPlainString();
			if(str.startsWith("0.")) str=str.substring(1);
			System.out.println(str);
		}
	}
}


HDU 1316 大数递推+函数判断

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

public class Main 
{
	public static   BigInteger []f=new BigInteger[610];
	public static  int index(BigInteger c,int flag)
	{
		if(flag==1)
		{
			for(int i=1;i<600;i++)
				if(f[i].compareTo(c)>=0) return i;
		}
		else 
		{
			for(int i=1;i<600;i++)
				if(f[i].compareTo(c)>0) return i;
		}
		return 0;
	}
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		BigInteger a,b;
		f[1]=BigInteger.ONE;f[2]=BigInteger.valueOf(2);
		for(int i=3;i<601;i++)
			f[i]=f[i-2].add(f[i-1]);
		while(cin.hasNextBigInteger())
		{
			a=cin.nextBigInteger();
			b=cin.nextBigInteger();
			if(a.equals(b)&&a.equals(BigInteger.ZERO)) break;
			int i=index(a,1);
			int j=index(b,0);
			System.out.println(j-i);
		}
	}
}

HDU 1715 比上一题容易

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

public class Main 
{
	public static   BigInteger []f=new BigInteger[1010];
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		BigInteger a,b;
		f[1]=BigInteger.ONE;f[2]=BigInteger.ONE;
		for(int i=3;i<1001;i++)
			f[i]=f[i-2].add(f[i-1]);
		int n=cin.nextInt();
		while(n-->0)
		{
			int p=cin.nextInt();
			System.out.println(f[p]);
		}
	}
}

HDU 1250 java大数相加递推

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

public class Main 
{
	private static BigInteger []f=new BigInteger[10005];
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		for(int i=1;i<5;i++)
			f[i]=BigInteger.ONE;
		for(int i=5;i<1000;i++)
			f[i]=f[i-4].add(f[i-3].add(f[i-2].add(f[i-1])));
		while(cin.hasNextInt())
		{
			int i=cin.nextInt();
			System.out.println(f[i]);
		}
	}
}

HDU 1297 大数相加与找规律

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

public class Main 
{
	private static BigInteger []f=new BigInteger[1005];
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		f[1]=BigInteger.ONE;
		f[2]=BigInteger.valueOf(2);
		f[3]=BigInteger.valueOf(4);
		f[4]=BigInteger.valueOf(7);
		for(int i=5;i<1005;i++)
			f[i]=f[i-4].add(f[i-2].add(f[i-1]));
		while(cin.hasNextInt())
		{
			int i=cin.nextInt();
			System.out.println(f[i]);
		}
	}
}

HDU 4919 多校第五场 大数+记忆化递归

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

public class Main 
{
	private static BigInteger one=BigInteger.ONE;
	private static BigInteger two=BigInteger.valueOf(2);
	private static BigInteger three=BigInteger.valueOf(3);
	private static BigInteger four=BigInteger.valueOf(4);
	private static BigInteger six=BigInteger.valueOf(6);
	private static HashMap<BigInteger,BigInteger> map=new HashMap<BigInteger,BigInteger>();
	public static BigInteger dfs(BigInteger n)
	{
		if(n.equals(two)) return  BigInteger.ZERO;
		if(n.equals(three)) return six;
		if(n.equals(four)) return  four;
		if(map.containsKey(n)) return  map.get(n);
		BigInteger ans,k=n.divide(two);
		if(n.mod(two).equals(one))
			ans=four.multiply(dfs(k)).add(six.multiply(k));
		else ans=two.multiply(dfs(k)).add(two.multiply(dfs(k.subtract(one)))).add(four.multiply(k)).subtract(four);
		map.put(n,ans);
		return  ans;
	}
	public static void main(String args[])
	{
		Scanner cin = new Scanner(System.in);
		while(cin.hasNextBigInteger())
		{
			BigInteger n=cin.nextBigInteger();
			System.out.println(dfs(n));
		}
	}
}




你可能感兴趣的:(java大数专题)