HDU4927(Series 1)

题目地址:Series 1

题目大意:

        有一个序列A集合为{A1,A2.....An}。第0个序列为其本身,第一个序列为后一个减去前一个(例:A2-A1,A3-A2...An-An-1)以此类推,则第n-1个序列就一定为一个数。输出这个数。

解题思路:

       通过计算求出的这个数ans=aA1+a2A2..anAn。  则前面的系数为杨辉三角里第n行的系数(二项式系数),从最后一个系数符号为正,一正一负一次往前类推。

处理大数问题,用java编写。

代码:

 1 import java.util.*;
 2 import java.math.*;
 3  
 4 public class Main
 5 {
 6     public static void main(String []args)
 7     {
 8         int n,i,j,T;
 9         Scanner cin=new Scanner(System.in);  //声明输入。
10         BigInteger p[]=new BigInteger[3005]; //声明大数数组
11         T=cin.nextInt(); //输入T
12         while(T!=0)
13         {
14             T--;
15             n=cin.nextInt();//输入n
16             BigInteger minn=BigInteger.valueOf(0),maxx=BigInteger.valueOf(0),c=BigInteger.valueOf(1),tmp,ans;//声明加上赋初值
17          
18             for(i=1; i<=n; i++)
19                 p[i]=cin.nextBigInteger();
20          
21             for(i = 0; i<=n-1; i++)  //从0开始,为了计算杨辉三角的系数符号从最后一个为正开始。
22             {
23                 if(i>0) //除数不能为0
24                   {    
25                       BigInteger xxx=BigInteger.valueOf(n-i);  //乘上分母的最大的一个数
26                       c=c.multiply(xxx)/*相乘*/.divide/*相除*/(BigInteger.valueOf(i));//除去分子最小的一个数//通过计算出最后一个系数,依次计算出前一个的系数
27                   }
28                 tmp=c.multiply(p[n-i]);
29                 if(i%2==1)
30                     minn=minn.add(tmp);//相加
31                 else
32                     maxx=maxx.add(tmp);
33             }
34             maxx=maxx.subtract(minn); //正的值减去负数的值
35             System.out.println(maxx.toString());//输出
36         }
37     }
38 }
View Code
原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3900553.html