一个关于求阶乘函数的问题(入门级)

vcjevcje 2009-07-24 09:24:02
题面是“编写一个能求出‘1!+2!+3!+4!+5!+…’的程序”:
本人思想是“main函数求阶乘相加、JC函数求阶乘”。
为了先判断阶乘函数是否编写正确,我先将main函数编成JC函数的结果输出(即如下程序仅求阶乘):

#include"iostream.h"
int JC(int n);//求n!
int main()//求阶加
{
int n;
cout <<JC(n)<<endl;
return 0;
}
int JC(int n=1)
{
int m;
cout<<"请输入一个正整数求阶乘"<<endl;
cin>>m;
for (int i=1;i<=m;i++)
{
n=n*i;
}
return n;
}

可是上面的程序运算结果完全不是求阶乘的结果。如输入‘5’,结果是‘-96’。到底是哪里出错了呢?请高人指点,不胜感谢!!!
...全文
653 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
handsomeszg 2009-07-24
  • 打赏
  • 举报
回复
int n;
cout < <JC(n) < <endl;
——n没初始化,就加上n=1就可以了 。
talos_5 2009-07-24
  • 打赏
  • 举报
回复
有求阶乘的公式没
Lyw110 2009-07-24
  • 打赏
  • 举报
回复
int n; // n 没有初始化
cout < <JC(n) < <endl; [code=C/C++]


而且你 JC 这样写本就是错的。3楼的函数就行了。
vcjevcje 2009-07-24
  • 打赏
  • 举报
回复
谢谢!有了!
asksgp 2009-07-24
  • 打赏
  • 举报
回复
对,阶乘之和大于int最大值就不能用我上面的方法了。
[Quote=引用 7 楼 lzy0001sl 的回复:]
求一个大于几十的数的阶乘就不是我们的计算机能够办到的,因此你上面求阶乘的方法有局限性。最好用数据结构求一个大数的阶乘。代码如下:
C/C++ code
#include<stdio.h>#define N 1000long s[N]={1,1},n=N,t=2,a=1,b=0;int main()
{for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%10000,b/=10000;for(printf("%d",s[*s]);--*s>0;)
printf("%04d",s[*s]);return0;
}
这里是求1000的阶乘,你修改N的值可以求其他很大数的阶乘了
[/Quote]
vcjevcje 2009-07-24
  • 打赏
  • 举报
回复
回复“晨星”,这个函数就是求m的阶乘,然后给了JC(n),返回主函数啊!

回复“pluto2009”,还是不行,运行不对啊。

回复“zlz1215312”,long也不行,结果还是不对。
asksgp 2009-07-24
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
int JC(int n);//求n!
int main()//求阶加
{
int n,sum=0;
cout <<"请输入一个正整数求阶乘" <<endl;
cin>>n;
cout<<endl;
for(int i=1;i<=n;i++)
{
sum=sum+JC(i);
}
cout<<"阶乘之和为:"<<sum<<endl;
return 0;
}
int JC(int n)
{
if(1==n)
return n;
else
return JC(n-1)*n;
}
lzy0001sl 2009-07-24
  • 打赏
  • 举报
回复
求一个大于几十的数的阶乘就不是我们的计算机能够办到的,因此你上面求阶乘的方法有局限性。最好用数据结构求一个大数的阶乘。代码如下:

#include<stdio.h>
#define N 1000
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()
{
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%10000,b/=10000;
for(printf("%d",s[*s]);--*s>0;)
printf("%04d",s[*s]);
return 0;
}

这里是求1000的阶乘,你修改N的值可以求其他很大数的阶乘了
pluto2009 2009-07-24
  • 打赏
  • 举报
回复
不对,将上面的m=n*i改为 m*=i;
是我111 2009-07-24
  • 打赏
  • 举报
回复
#include <iostream.h>

long fun(long m)
{
long n =1;
for (int i=1;i <=m;i++)
{
n=n*i;
}
return n;

}
void main()
{
cout << fun(5)<<endl;
}
是我111 2009-07-24
  • 打赏
  • 举报
回复
把 int 改成long 就行了。
pluto2009 2009-07-24
  • 打赏
  • 举报
回复

#include"iostream.h"
int JC(int n);//求n!
int main()//求阶加
{
int m;
cout < <"请输入一个正整数求阶乘" < <endl;
cin>>m;
cout < <JC(m) < <endl;
return 0;
}
int JC(int n)
{
int m = 1;
for (int i=1;i <=n;i++)
{
m=n*i;
}
return m;
}
晨星 2009-07-24
  • 打赏
  • 举报
回复
for (int i=1;i <=m;i++)
{
n=n*i;
}
——这个好像也不对,这只是求了m的阶乘,而不是1! + 2! + …… + m!。
晨星 2009-07-24
  • 打赏
  • 举报
回复
int n;
cout < <JC(n) < <endl;
——n没初始化。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧