懂C++的进来帮帮我(高分)

来源:百度知道 编辑:UC知道 时间:2024/05/16 23:21:42
小弟刚学C++,下面是我编的一个杨辉三角程序,为什么只能正确输出前12行的数列,从第13行就输出不完整或错误?
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,x=1;
cin>>n;
while(x<=n)
{
int a=x,d=x,b=1,e=1;
cout<<setw(n-x+4)<<"1 ";
while(a>=b)
{
cout<<a/b<<" ";
d--,e++;
a=a*d;
b=b*e;
}
cout<<endl;
x++;
}
return 0;
}

你的a=a*d,b=b*e是算C,其实可以这么算,不过你并没用到杨辉三角的理论,而是直接用数学公式,算a=a*d的到13行后面的时候,a的数值已经溢出了,就是说超出int能表示的范围了,所以到后面就出错了,你想想a=a*d是不是越算越大.可为什么14行的开始以部分还能正确显示呢?因为你在while(x<=n)后又把a,d,b,e又初始化了,如果你吧他们都定义成unsigned int型,13,14行都能正确显示,但后面还要出错,所以这样算并不好.
正确的算法应该是上一行的相邻两个数得下面的对应的数,全是加法,所以会正确显示到很多行,你自己想想怎么写代码,不会我再给你写.