http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2370
难题锻炼思维,水题锻炼细心。
这个题有两个需要注意的地方
1,关于前导零
2,高精度
代码:
import java.math.BigInteger; import java.util.Scanner; public class Main { /** * @param args */ static final int N=2005; public static void main(String[] args) { // TODO Auto-generated method stub long c[]={0,0,1,1,1,3,3,1}; //long [] c = new long[8]; BigInteger [] sum=new BigInteger[N]; sum[0]=BigInteger.ONE; for(int i=1;i<N;++i){ sum[i]=BigInteger.ZERO; } for(int i=2;i<N;++i){ for(int j=2;j<=7&&i-j>=0;++j){ sum[i]=sum[i].add(sum[i-j].multiply(BigInteger.valueOf(c[j]))); } if(i==6){ sum[i]=sum[i].subtract(BigInteger.ONE); } } sum[0]=BigInteger.ZERO; sum[6]=sum[6].add(BigInteger.ONE); for(int i=1;i<N;++i){ sum[i]=sum[i].add(sum[i-1]); } int k; Scanner in = new Scanner(System.in); while(in.hasNext()){ k=in.nextInt(); System.out.println(sum[k]); } in.close(); } }