/*
*1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
输入描述:
输入数据包含多组测试数据。 每组测试数据的输入只有一个正整数n(1≤n≤128),表示将要输出的杨辉三角的层数。 输入以0结束
输出描述:
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
*
/
/*这道题需要注意以下几点: 1、这道题主要还是对大数据的处理,和斐波那契数列有点像,给的测试用例都比较大,用基本的int,long之类的根本就不行,long型的最多到68,就超了,题目给的要是1≤n≤128,所以这个题主要是看如何操作这种比较大的数值。Java里面提供了一个很强大的BigInteger,这个类可以处理任意大的数字,里面有好多方法,可以查查JDK多了解一下关于这个类的用法,可以解决好多比较大的数字的问题。 2、然后就是这个题的思想,仔细观察,可以发现这样一个规律,rs[i][j]=rs[i-1][j]+rs[i-1][j-1]);我们可以利用这个规律在一个二维矩阵中动态打表,最后输出这个二维矩阵中不为零的数字即可。 3、输出格式的问题:题目中让每行数字之间用空格隔开,那么我们需要注意在每一行的最后一个数字后面是不能加空格的,由于空格我们看不见,所以打印出来看上去和答案一样,但是会报错,就是因为多了一个空格,我举个例子,比如我用“*”代替空格,便于观察,如下输出: 1* 1*1* 1*2*1* 1*3*3*1* 如果将“*”换成“ ”感觉和题目的输出一样, 其实是每行末尾多了一个空格,所以这个要注意。 */ 下面我贴上自己的代码: import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); if(n==0){ break; } BigInteger [][] rs=new BigInteger[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { rs[i][j] = new BigInteger("0"); } } for (int i = 0; i < rs.length; i++) { rs[i][0]=new BigInteger("1"); } for (int i = 1; i < rs.length; i++) { for (int j = 1; j < i+1; j++) { rs[i][j]=rs[i-1][j].add(rs[i-1][j-1]); } } StringBuffer sb=new StringBuffer(); for (int i = 0; i < rs.length; i++) { for (int j = 0; j < i+1; j++) { sb.append(rs[i][j]+"*"); } System.out.println(sb.substring(0, sb.length())); sb.replace(0, sb.length(), ""); } System.out.println(); } } }