初学C++请多指教:程序找错。

来源:百度知道 编辑:UC知道 时间:2024/05/23 14:55:48
求输入数据的阶乘:
#include <iostream.h>
void main()
{
long a;
long j;
cout<<"输入数值:";
cin>>j;
for(a=1;a<j;a++)
j=j*a;
cout<<"它的阶乘为:"<<j<<endl;
}
以上程序为什么当输入值大于2时就会出错?如当输入3时,结果为-458131456。
请明示错误,谢谢!
怎么解决啊?

你那个"j"越来越大了,"a"根本不能比它大了,只有j溢出变成负数后,循环才能停下来
解决方法:
#include <iostream.h>
void main()
{
long a;
long j;
long k;
cout<<"输入数值:";
cin>>j;
k=j;//用k保存您输入的数字,以便循环里使用
for(a=1;a<k;a++)
j=j*a;//这里j就作为结果了
cout<<"它的阶乘为:"<<j<<endl;
}

你将LONG 换成INT

把 a 定义为整型

算法错误。
for(a=1;a<j;a++)
j=j*a;

为了找错误,添加一句
for(a=1;a<j;a++)
{
cout<< j <<'*' << a << endl;
j=j*a;
}
a在变大,递增速度是1
但是 j 也在变大,而且递增速度更快,因为j=j*a。

这是输出
输入数值:3
3*1
3*2
6*3
18*4
72*5
360*6
2160*7
15120*8
120960*9
1088640*10
10886400*11
119750400*12
1437004800*13
1501193216*14
它的阶乘为:-458131456

解决:增加一个变量 m 用来存储j的阶乘。
for(a=1;a<j;a++)
{
c