C语言中计算N!的方法

帮我看看这个程序怎么改能计算N!谢谢肋....#include <stdio.h>
int main()
{
int n = 1;
scanf("%d",&n);
int a[20000];
int carry;
int i;
int digit = 1;
a[0] = 1;
int temp;
for(i = 2; i <= n; ++i)
{
carry = 0;
for(int j = 1; j <= digit; ++j)
{
temp = a[j-1] * i + carry;
a[j-1] = temp % 10;
carry = temp / 10;
}
while(carry)
{
a[++digit-1] = carry % 10;
carry /= 10;
}
}
for(i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
printf("\n");
n++;
return 0;
}

晕这个就是小学的长乘法,这个是用数组来存储的大数阶乘:

#include <stdio.h>

int main()
{
int n = 1;
scanf("%d",&n);
int a[20000];
int carry;
int i;
int digit = 1; // digit记录的是当前的值的位数
a[0] = 1; // 初始化第1位为1
int temp;
for(i = 2; i <= n; ++i) { // 从2开始乘
carry = 0;
// 这个循环分别用i乘以当前积的每一位
for(int j = 1; j <= digit; ++j) {
temp = a[j-1] * i + carry; // 累加进位
a[j-1] = temp % 10; // 收缩
carry = temp / 10; // 记录进位
}
while(carry) { // carry不为0则表示进出了新的位数
a[++digit-1] = carry % 10; // 依次进位直到carry为0
carry /= 10;
}
}
// 是倒过来存的,所以输出也要倒过来
for(i = digit; i >=1; --i)
printf("%d",a[i-1]);
printf("\n");
n++;
return 0;
}

看你的样子,你们来是应该不会叫你编高精度的吧,写个一般的可以了:
#include <stdio.h>

int main()
{
int fac, i;
int n;
scanf("%d", &n); // 输入n
// 计算fac = 1*2*...*n
for(fac = 1, i = 2; i <= n; ++i)
fac *= i;
printf("%d", fac);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
求吧 应该没有那么复杂吧
main()
{
int n,i,s=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
s*=i;
printf("%d\n",s);
}
可以算N的阶乘本回答被网友采纳
第2个回答  2013-11-13
楼上写的是循环实现的,还有一种用递归实现的:
#include <iostream>
using namespace std;
int fun(int n)
{
if(n==1 || n==0)
return 1;
else if(n>0)
return n*fun(n-1);
else return 0;
}
main()
{
int n;
cin>>n;
int x=fun(n);
cout<<x;
}
第3个回答  2013-11-13
这个有什么问题吗,还是自己的作业?提示下,计算阶乘方法很多,比如有:
秦九韶法、FNT、FFT、Stirling公式 等等
第4个回答  2017-07-13
哪里错了?已经可以算出来了不是吗?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网