//#include "stdafx.h"//VC++6.0要用这一行
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
char *FactorialLN(int n){
int i,j,k,tmp,len
char *pa,*pb,*px,s[11]="",*ps9=s+9
double dec=0
for(n++,i=2i<ndec+=log10(i++))
len=(int)dec+2
if(!(pa=(char *)malloc(len)) || !(pb=(char *)malloc(len))){
printf("Application memory failure...")
exit(0)
}
for(i=0i<len*(pa+i)=*(pb+i++)=0)
for(i-=2,j=--nj*(pb+i--)=j%10,j/=10)
len--
i++
while((k=--n)>1){
for(px=ps9k*px--=k%10,k/=10)
for(k=0,tmp=ps9-pxk<tmpk++){
for(px=ps9,j=len-1j>=i*(pa+j-k)+=*(pb+j--) * *(px-k))
for(px=pa-k,j=len-1-kj>=i-kj--){
if(*(px+j)>9){
*(px+j-1) += *(px+j)/10
*(px+j) %= 10
}
}
if(i) i--
}
px=pa
pa=pb
pb=px
for(k=0k<len*(pa+k++)=0)
}
free(pa)
for(i=0i<len*(pb+i++)+='0')
return pb
}
void main(void){
int n
char *p
printf("Please enter an integer.\nn=")
scanf("%d",&n)
printf("\n%d! = %s.",n,p=FactorialLN(n))
free(p)
printf("\n")
}
太麻烦了吧?如果仅仅为了求N!-M!, N!+M!,调用一个阶乘函数,不就行了?下面的是求N!-M!, N!+M!的代码:
#include<stdio.h>
int jie(int n)
{
int x
for(x=1n>0n=n-1)
x*=n
return(x)
}
main()
{
int n,m,q1,q2
printf("please input n:\n")
scanf("%d",&n)
printf("please input m:\n")
scanf("%d",&m)
q1=jie(n)-jie(m)
q2=jie(n)+jie(m)
printf("%d!-%d!=%d\n%d!+%d!=%d\n",n,m,q1,n,m,q2)
}
n的阶乘就是从1到的累积,所以可以通过一个for循环,从1到n依次求积即可。
参考代码:
#include "stdio.h"
int main() {
int n,i,s=1
scanf("%d",&n)
for(i=1i<=ni++)//for循环求累积
s=s*i
printf("%d\n",s)
return 0
}
/*
运行结果:(例如求5的阶乘)
5
120
*/
扩展资料:
return用法:
return返回一个数值的意思就是把return<表达式>后面表达式的值返回给调用他的函数。举个例子:
int sum(int i,int j)
{
return i+j
printf("这个语句不会被执行,因为该子函数执行到上面的return语句就无条件结束了")
}
main()
{
int a=10,b=11,c
c=sum(a,b)
printf("%d",c)
}