大數類題目——————JAVA實現
阿新 • • 發佈:2018-11-07
HDU 1002 A + B Problem II
直接寫就好了,不過格式有些麻煩
import java.math.*;
import java.util.*;
public class HDU1002{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
int t = cin.nextInt();
int num = 1;
int x=0;
while(t>0){
if(x!=0) System.out.println("");
else x= 1;
BigInteger a = cin.nextBigInteger();
BigInteger b = cin.nextBigInteger();
System.out.println("Case "+num+":");
System.out.println(a+" + "+b+" = "+a.add(b));
// System.out.println("Case "+num+":\n"+a+" + "+b+" = " +a.add(b));
//寫著一句話Wa了好多次,我現在有些懷疑println和"\n"不一樣。
num++;
t--;
}
}
}
POJ 2506 Tiling
推出公式:
不過JAVA寫大數還真是方便 因為懶
import java.util.*;
import java.math.*;//得有這個庫
public class Main{
public static void main(String[] agrs){
Scanner cin = new Scanner(System.in);
BigInteger[] a = new BigInteger[300];//定義大數陣列
a[0] = BigInteger.ONE;//初始化
a[1] = BigInteger.ONE;//初始化
a[2] = a[1].add(a[0].add(a[0]));
for(int i=3;i<=299;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!
求最大是 10000! 肯定得用大數來解決
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger n;
while(cin.hasNext()){
int x = cin.nextInt();
n = BigInteger.ONE;//初始化為1
for(int i=1;i<=x;i++)
n = n.multiply(BigInteger.valueOf(i));
System.out.println(n);
}
}
}
HDU 1047 Integer Inquiry
多個大數相加,不過哦需要注意一下輸入輸出格式,
n組資料,每兩個輸出之間有一個空行
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
while(n-->0){
BigInteger ans = BigInteger.ZERO;
BigInteger x;
while(cin.hasNextBigInteger()){
x = BigInteger.ZERO;
x = cin.nextBigInteger();
if(!x.equals(BigInteger.valueOf(0)))
ans = ans.add(x);
else{
System.out.println(ans);
if(n!=0)
System.out.println("");
break;
}
}
}
System.gc();
}
}
HDU 1715 大菲波數
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger[] a;
a = new BigInteger[2000];
a[0] = BigInteger.ZERO;
a[1] = BigInteger.ONE;
for(int i=2;i<1005;i++)
a[i] = a[i-1].add(a[i-2]);
int n = cin.nextInt();
while(n-->0){
int i = cin.nextInt();
System.out.println(a[i]);
}
}
}
HDU 1063 Exponentiation
浮點數的冪,需要注意輸出格式
0.123 輸出為 .123
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
BigDecimal a = cin.nextBigDecimal();//輸入大浮點數
int n = cin.nextInt();
String res = a.pow(n).stripTrailingZeros().toPlainString();//去掉整數後的小數點和多餘的0
if(res.startsWith("0"))
res = res.substring(1); //去掉前導0
System.out.println(res);
}
}
}
HDU 1753 大明A+B
大浮點數相加
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigDecimal a,b;
while(cin.hasNext()){
a = cin.nextBigDecimal();
b = cin.nextBigDecimal();
String res = a.add(b).stripTrailingZeros().toPlainString();
System.out.println(res);
}
}
}
HDU 1316 How Many Fibs?
求區間【a,b】中有多少個斐波那契數
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger[] a = new BigInteger[3000];
a[0] = new BigInteger("1");
a[1] = new BigInteger("1");
for(int i=2;i<=500;i++)
a[i] = a[i-1].add(a[i-2]);
BigInteger x, y;
while(cin.hasNext()){
x = cin.nextBigInteger();
y = cin.nextBigInteger();
if(x.compareTo(BigInteger.ZERO)==0 && y.compareTo(BigInteger.ZERO)==0) break;
int ans = 0;
for(int i=1;i<=500;i++){
if(x.compareTo(a[i]) <= 0 && y.compareTo(a[i]) >= 0) ans++;
if(y.compareTo(a[i]) < 0) break;
}
System.out.println(ans);
}
}
}