Java大数求解ACM(HDU)

来源:互联网 发布:数据恢复精灵4.0破解版 编辑:程序博客网 时间:2024/05/29 21:28
利用Java大数的ACM题:HDU 1715 1002 1042 1753 1865 1063,代码Accepted。

代码比较简单,题目详细描述见官网  http://acm.hdu.edu.cn/listproblem.php?vol=1


//1715 求斐波那契数列import java.math.*;import java.util.*;public class Main{    public static void main(String args[]){        BigDecimal a[] = new BigDecimal[1005];     Scanner cin = new Scanner(System.in);     while(cin.hasNext()){//等价于!=EOF                       a[1] = a[2] = new BigDecimal("1");           for (int i =3; i< 1005; i++){               a[i] = a[i-1].add(a[i-2]);           }           int N = cin.nextInt();           for (int j = 0; j< N;j++){               int pi = cin.nextInt();                System.out.println(a[pi]);           }         }       }   //1753 求A+Bimport java.math.*;import java.util.*;public class Main{    public static void main(String args[]){         BigDecimal c = new BigDecimal("0");       Scanner cin = new Scanner(System.in);     while(cin.hasNext()){//等价于!=EOF           BigDecimal a = cin.nextBigDecimal();             BigDecimal b = cin.nextBigDecimal();             c = a.add(b);           System.out.println(c.stripTrailingZeros().toPlainString());         }       }    }//1002 求 A+B(注意格式)import java.math.*;import java.util.*;public class Main{    public static void main(String args[]){         BigInteger c = new BigInteger("0");       Scanner cin = new Scanner(System.in);     int N = cin.nextInt();     //while(cin.hasNext()){//等价于!=EOF                 for (int i = 1;i<=N;i++){            BigInteger a = cin.nextBigInteger();              BigInteger b = cin.nextBigInteger();              c = a.add(b);            System.out.println("Case "+i + ":");            System.out.println(a + " + " + b + " = " + c);            if( i != N)                    System.out.println();//注意:最后一个样例后不输出空行            }         }      // }  }//1042 求阶乘import java.math.*;import java.util.*;public class Main{    public static void main(String args[]){         Scanner cin = new Scanner(System.in);     while (cin.hasNext()){        // 计算阶乘         BigInteger c = new BigInteger("1");           int n = cin.nextInt();         for(int i = 1;i <= n; i++){             BigInteger s = BigInteger.valueOf(i);             c = c.multiply(s);         }         System.out.println(c);     }    }}//1685 求111的组合个数:类似于一个有n级的楼梯,一次可以上一个台阶,也可以上两个台阶,问一共有多少种方法。import java.math.*;import java.util.*;public class Main{    public static void main(String args[]){         BigInteger arr[] = new BigInteger[205];       Scanner cin = new Scanner(System.in);     arr[1] = BigInteger.valueOf(1);     arr[2] = BigInteger.valueOf(2);     for (int j = 3; j<205; j++){         arr[j] = arr[j-1].add(arr[j-2]);     }     int N = cin.nextInt();       for (int i = 0;i<N; i++){         BigInteger a = cin.nextBigInteger();           int k = a.toString().length();                  System.out.println(arr[k]);              }    }}//1063 求R的n次方,注意输出格式的要求import java.math.*;import java.util.*;public class Main{    public static void main(String args[]){     Scanner cin = new Scanner(System.in);     while (cin.hasNext()){        // 计算n方         BigDecimal r = cin.nextBigDecimal();         int n = cin.nextInt();         BigDecimal rn = new BigDecimal("1.0");          rn = r.pow(n).stripTrailingZeros();//去掉字符串最后面的0以及来消除BigDecimal用科学计数形式来表示结果         String tmp = rn.toPlainString();         //去掉前导0         if(tmp.startsWith("0"))             tmp=tmp.substring(1);          System.out.println(tmp);       }    }}


0 0