展开全部
你是不是求C语言编写求n阶乘的代码?
/*求n的阶乘
*/#include
"stdio.h"int
main(void){
int
num,
i,
result;
printf
("请输入一个数\n\n");
scanf
("%d",
&num);
for
(i
=
1,
result
=
1;
i
<=
num;
++i)
result
*=
i;
printf
("\n%d!=
%d",
--i,
result);
return
0;}
/*求n的阶乘
*/#include
"stdio.h"int
main(void){
int
num,
i,
result;
printf
("请输入一个数\n\n");
scanf
("%d",
&num);
for
(i
=
1,
result
=
1;
i
<=
num;
++i)
result
*=
i;
printf
("\n%d!=
%d",
--i,
result);
return
0;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int recursion(int x)
{
if (x==1)
return x;
else
return x*(recursion(x-1));
}
递归,在main函数里面调用就好了,好久没看过C了,不知对不对,你试试吧,重要的是这个思想.......
{
if (x==1)
return x;
else
return x*(recursion(x-1));
}
递归,在main函数里面调用就好了,好久没看过C了,不知对不对,你试试吧,重要的是这个思想.......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include"stdio.h"
int input(int min,int max);
void main()
{int n,m,i,j,k,len=2570;
static int s[2570];
s[0]=1;
printf("请给出n的值:\n");
n=input(0,1000);
printf("请给出m的值:\n");
m=input(0,n);
j=n; k=m;
while(k--)
{for(i=0;i<=2569;i++) s[i]*=j;
for(i=0;i<=2568;i++)
while(s[i]>=10)
{s[i]-=10; s[i+1]++;}
j--;}
for(i=2569;!s[i--];) len--;
if(n==m) printf("%d!=",n);
else printf("A%d %d=",n,m);
if(len<=20)
for(i=len-1;i>=0;i--)
printf("%d",s[i]);
else
{printf("%d.",s[len-1]);
for(i=len-2;i>=len-10;i--)
printf("%d",s[i]);
printf("e%d",len-1);}
printf("\n");}
int input(int min,int max)
{int result,again;
do
{scanf("%d",&result);
if((result<=max)&&(result>=min)) again=0;
else {printf("输入错误,请重新输入:\n"); again=1;}
}while(again);
return result;}
我的这个程序不只能算阶乘,还能算排列数就是高中学的An m,比如A5 3=5*4*3,你从键盘输入的第一个数是n,第二个数是m。int型变量最大能表示到32767,但是我做的程序能突破这个上限,而且如果结果过长,可以用e指数表示。
#include"stdio.h"
int input(int min,int max);
void main()
{int n,m,i,j,k,len=2570;
static int s[2570];
s[0]=1;
printf("请给出n的值:\n");
n=input(0,1000);
printf("请给出m的值:\n");
m=input(0,n);
j=n; k=m;
while(k--)
{for(i=0;i<=2569;i++) s[i]*=j;
for(i=0;i<=2568;i++)
while(s[i]>=10)
{s[i]-=10; s[i+1]++;}
j--;}
for(i=2569;!s[i--];) len--;
if(n==m) printf("%d!=",n);
else printf("A%d %d=",n,m);
if(len<=20)
for(i=len-1;i>=0;i--)
printf("%d",s[i]);
else
{printf("%d.",s[len-1]);
for(i=len-2;i>=len-10;i--)
printf("%d",s[i]);
printf("e%d",len-1);}
printf("\n");}
int input(int min,int max)
{int result,again;
do
{scanf("%d",&result);
if((result<=max)&&(result>=min)) again=0;
else {printf("输入错误,请重新输入:\n"); again=1;}
}while(again);
return result;}
我的这个程序不只能算阶乘,还能算排列数就是高中学的An m,比如A5 3=5*4*3,你从键盘输入的第一个数是n,第二个数是m。int型变量最大能表示到32767,但是我做的程序能突破这个上限,而且如果结果过长,可以用e指数表示。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高精度阶乘
#include<cstdio>
#include<cstdlib>
#include<cstring>
struct hp{int len,a[10000000];};
hp x,y,z;
int main()
{
int n;
scanf("%d",&n);
memset(z.a,0,sizeof(z.a));
z.a[0]=1;z.len=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<z.len;j++)
{
z.a[j]=z.a[j]*i;
}
for(int j=0;j<z.len;j++)
{
z.a[j+1]=z.a[j+1]+z.a[j]/10;
z.a[j]=z.a[j]%10;
}
while(z.a[z.len]!=0)
{
z.a[z.len+1]=z.a[z.len]/10;
z.a[z.len]=z.a[z.len]%10;
z.len++;
}
}
for (int i=z.len-1;i>=0;i--)
printf("%d",z.a[i]);
//system("pause");
}
#include<cstdio>
#include<cstdlib>
#include<cstring>
struct hp{int len,a[10000000];};
hp x,y,z;
int main()
{
int n;
scanf("%d",&n);
memset(z.a,0,sizeof(z.a));
z.a[0]=1;z.len=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<z.len;j++)
{
z.a[j]=z.a[j]*i;
}
for(int j=0;j<z.len;j++)
{
z.a[j+1]=z.a[j+1]+z.a[j]/10;
z.a[j]=z.a[j]%10;
}
while(z.a[z.len]!=0)
{
z.a[z.len+1]=z.a[z.len]/10;
z.a[z.len]=z.a[z.len]%10;
z.len++;
}
}
for (int i=z.len-1;i>=0;i--)
printf("%d",z.a[i]);
//system("pause");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询