Java大数求解ACM(HDU)

利用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+B
import 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值