由于int和long long有最大值,在20!时已经接近极限,所以在22行开始会输出错误值(21!),想过用double先除后乘,由于格式问题失败(输出非整型数字),也想过用double后转int,担心精度问题没有尝试。真正能够较多写出杨辉三角的是本人第四篇博客,利用数组(但是占空间较多)。
//自写杨辉三角输出,溢出问题
int main() {
int n = 0;
cin >> n;
long long sum = 1;
long long sum2 = 1;
long long s = 1;
//行数
for (int i = 1; i <= n; i++)
{
//每行输出个数
for (int j = 0; j < i; j++)
{
int z = i;
//每次输出的数值
if (j == 0)
sum = 1;
else
{
for (int k = 1; k <=j;k++ )
{
sum2 *= (--z);
s *= k;
}
sum = sum2 / s;
}
cout << sum << '=' << sum2 << '/' << s << ' ';
sum = 1;
sum2 = 1;
s = 1;
}
cout << endl;
}
system("pause");
return 0;
}