java大法好,退c保平安
看完java的大数类,决定重新做一下之前大数的题
然后再整理一下吧= =
整数部分(BigInterger)
hdu 1001 求从1加到n,n可以很大
//package BigInteger1;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
while(cin.hasNextLong())
{
long n = cin.nextLong();
BigInteger mul = BigInteger.ZERO;
for(long i=0;i<=n;i++)
mul=mul.add(BigInteger.valueOf(i));
System.out.println(mul);
System.out.println();
}
}
}
hdu 1002 大整数相加
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
int test = cin.nextInt();
for(int tt=1;tt<=test;tt++)
{
BigInteger a = cin.nextBigInteger();
BigInteger b = cin.nextBigInteger();
System.out.println("Case "+tt+":");//这里不断开,用\n会报错??
System.out.println(a+" + "+b+" = "+a.add(b));
if(tt!=test)
System.out.println();
}
}
}
hdu 1041 递推公式+大数(如a[i]=a[i-1]+2*a[i-2])
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
BigInteger [] a=new BigInteger [1005];
a[1]=BigInteger.ZERO;
a[2]=BigInteger.ONE;
a[3]=a[2];
a[4]=a[2].add(a[2].add(a[2]));
for(int i=4;i<=1000;i++)
{
a[i]=a[i-1].add(a[i-2].add(a[i-2]));
}
while(cin.hasNext()){//打表
int n = cin.nextInt();
System.out.println(a[n]);
}
}
}
hdu 1042 n!
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
int n = cin.nextInt();
BigInteger mul = BigInteger.ONE;
for(int i=1;i<=n;i++)
mul=mul.multiply(BigInteger.valueOf(i));
System.out.println(mul);
}
}
}
还有高精度幂:(BigDecimal)
hdu 1063 小数的n次方
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
while(cin.hasNextBigDecimal())
{
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);
// 或者 if(res.charAt(0)=='0')
// res = res.substring(1);
//ans=ans.pow(n);
//ans =ans.pow(n).stripTrailingZeros();整数去掉小数点
//System.out.println(ans);
}
}
}
小数相加:
hdu1753(都要注意去后置零,和整数去点,如果题目要求再去前置零用if
package teat1;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
while(cin.hasNextBigDecimal())
{
BigDecimal a= cin.nextBigDecimal();
BigDecimal b = cin.nextBigDecimal();
String ans=a.add(b).stripTrailingZeros().toPlainString();
System.out.println(ans);
}
}
}
整理一下:(随便写的
对于整数的题(先不看BigDecimal)
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
//声明和赋值
Scanner cin=new Scanner(System.in);//在import java.util.*;包中,
//实现了大整数输入的方法 cin.nextBigInteger()
BigInteger big1=BigInteger.ZERO;//0 声明一个大整数并常数值赋值0
BigInteger big2=BigInteger.ONE;//1
BigInteger big3=BigInteger.TEN;//10
BigInteger big4 =new BigInteger("1000");//赋除了0,1,10之外的常数值的方法一
BigInteger big5= BigInteger.valueOf(1000);//没有new赋除了之外的常数值的方法二
//BigInteger bi1 = new BigInteger(55,new Random()); 生成一个个随机的大整数
BigInteger [] a=new BigInteger [1005];//声明大整数数组,并赋值
a[1]=BigInteger.ZERO;
a[2]=BigInteger.ONE;
a[3]=a[2];
a[4]= BigInteger.valueOf(3);//a[4]=a[2].add(a[2].add(a[2]));
int n = cin.nextInt();
System.out.println(a[n]);
//手动输入
int n1=cin.nextInt();//输入一个int型的n1
long n2=cin.nextLong();//输入一个long的n2
BigInteger n3 = cin.nextBigInteger();//声明一个大数,并手动输入这个值
BigInteger n4 = cin.nextBigInteger();
//case处理
while(cin.hasNext())
{
//cin.hasNext()输入结束同c++里的while(scanf("%d",&n)!=EOF)
}
while(cin.hasNextLong())
{
//同上,这个输入的是long类型时
}
int test = cin.nextInt();
while(test-- >0)
{
//同c++里的while(scanf(test--))
}
for(int tt=4;tt<=test;tt++)
{
//需要记录case++时候
System.out.println("Case "+tt+":");//这里不断开,用\n会报错??
System.out.println(big1+" + "+big2+" = "+big1.add(big2));
}
//四则运算及其他
System.out.println(n3.add(n4));//n3+n4
System.out.println(n3.subtract(n4));//n3-n4
System.out.println(n3.multiply(n4));//n3*n4
System.out.println(n3.divide(n4));//n3/n4(两个大整数,整除的商
System.out.println(n3.remainder(n4));//n3%n4(两个大整数,取余数
System.out.println(n3.mod(n4));//同上
System.out.println(n3.gcd(n4));//n3和n4的最大公约数
System.out.println(n3.abs());//n3取绝对值
System.out.println(n3.negate());//n3取相反数
System.out.println(n3.min(n4));//n3
System.out.println(n3.max(n4));//n3
System.out.println(n3.abs());//n3取绝对值
System.out.println(n3.pow(2));//n3的2次方(指数
System.out.println(n3.toString(2)); // 转化为 x 的 n进制;
System.out.println(n3.compareTo(n4)==0); //x和y进行比较
if(big1.compareTo(big2) > 0)
System.out.println("bd1 is greater than bd2");
else if(big1.compareTo(big2) == 0)
System.out.println("bd1 is equal to bd2");
else if(big1.compareTo(big2) < 0)
System.out.println("bd1 is lower than bd2");
}
}
BigInteger(byte[])
把一个包含着(带正负号)整数的二进制补码的字节数组翻译为 BigInteger 。
BigInteger(int, byte[])
把一个整数的 sign-magnitude 表示法翻译为 BigInteger 。
BigInteger(int, int, Random)
返回有指定 bitLength(可能是素数)的随机选择的 BigInter 。
BigInteger(int, Random)
返回一个随机数,均匀分布在 [0, 2**numBits - 1] 之间
(假设由 rndSrc 提供一个公平的随机源) 。
BigInteger(String)
把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个十进制数字序列。
BigInteger(String, int)
把一个字符串翻译为一个 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个指定进制的数字序列。