计算阶乘 C语言高手请进!
发布网友
发布时间:2022-05-24 10:28
我来回答
共5个回答
热心网友
时间:2023-10-10 19:14
呵呵,我前段时间也在学,下面是我写的递归法,请多多指教
long
fac(long
x)
{
if
(x==1)
return
1;
else
return
fac(x-1)*x;
}
int
main()
{
cout<<"递归方法求一个数的阶乘!"<
>n;
cout<<"\n"<
>go;
if
(go=='y'||go=='y')
quit=1;
else
if
(go=='n'||go=='n')
quit=0;
else
{quit=0;cout<<"\n输入错误!";}
}
cout<
评论
0
0
加载更多
热心网友
时间:2023-10-10 19:14
有速度要求就用链表吧 4位1个结点 万进制
热心网友
时间:2023-10-10 19:14
1楼写到太麻烦了
为了保证位数够,我只定义了20000位,求10000!应该都够了
#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;
}
热心网友
时间:2023-10-10 19:15
楼上的很好很强大。
我这个是考试用的。
main()
{
long answer=1;
int i;
int N;
scanf("%d",&N);
if(N==0||N==1)answer=1;
else
for(i=2;i<=N;i++)answer=answer*i;
printf("%di=%d",N,answer);
}
热心网友
时间:2023-10-10 19:16
#include <stdio.h>
int main()
{
int res[3000]={0}; //1000位结果不可能多于3000位
int n,high = 0;res[0] = 1;
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
for(int j = 0; j <= high; j++) res[j] *= i;
for( j = 0; j < high; j++) {
res[j+1]+=(res[j]/10);
res[j]%= 10;
}
while(res[high] > 9) {
int carry = res[high] / 10;
res[high] %= 10;
res[++high] += carry;
}
}
// 输出
for( i = high; i >= 0; i--) {
printf("%d",res[i]);
}
printf("\n");
}