#include
int main(void)
{
long long n, i, j, k, x, y, s1, s2;
while (scanf("%lld", &n) != EOF)
{
printf("1\n");
for (i=2; i<=n; i++)//第一行直接打印,从第二行开始打印数字
{
printf("1 ");
for (x=3, j=i-1, k=1, s1=1, s2=1; x<=i; x++, j--, k++)//从第三行开始打印数据,且跳过前后的两个1
{
s1 *= j;
s2 *= k;
printf("%lld ", s1/s2);
}
printf("1\n");
}
}
return 0;
}
x:20, j:4, k:18, s1:8515157028618240000, s2:6402373705728000, s1/s2:1330
x:21, j:3, k:19, s1:7098727012145168384, s2:121645100408832000, s1/s2:58
x:22, j:2, k:20, s1:-4249290049419214848, s2:2432902008176640000, s1/s2:-1
你的这个算法在x到22的时候就long long溢出了。所以异常啦~~~
http://blog.csdn.net/hellokatewj/article/details/8577338
哪里不对了,讲清楚点