c语言求1到100阶乘代码

c语言求1到100阶乘代码,第1张

1到100?这数够大的了...

#include<stdio.h>

void main()

{

double j=1

for(int i=1i<=50i++)j*=i

printf("1到100的阶乘是%.0f\n",j)

}

下面用函数的递归调用做:

#include<stdio.h>

double fact(int n)/*求阶乘的函数*/

{

double j

if(n>1)j=n*fact(n-1)/*递归调用,当n>1时,一直会调用下去,只不过每次参数被减1*/

else

return 1/*当n被减到1时,返回1,如是会被累积,当n初始为1时直接返回1*/

return j/*j是当n>1时,最后要的结果*/

}

void main()

{

printf("1到n的阶乘是%.0f\n",fact(5))

}

代码在四舍五入,遇到进位处为9时处理有误,比如16。

#include<stdio.h>

#define LD long double

#define ULL unsigned long long

LD f(int n){

return (n==1 ? (LD)1 : ((LD)n *f(n-1)))

}

int main()

{

int flag=0,i=0,n=0

LD y

char str[20]

while(scanf("%d",&n)==1 &&n<=100 &&n>0 ){

y=f(n)

if(y <1.0e8 )/*不超过8位,整形输出*/

printf( "%d! = %d\n",n,(ULL)y )

else

{

sprintf(str,"%1.8e",y)

if( str[9] >'4')/*超过4,进一位*/

{

if(str[8]<'9')

str[8]++

else

{ i=8while(str[i]=='9') str[i--]='0'str[i]++}/*为9时不能直接+1,改为0后,进位*/

/*当所有位都为9时,需要进位并增加e后面的级数,还需要特殊处理,但是这种情况在1-100不会出现*/

}

for(i=9str[i]i++)

str[i] = str[i+1]

printf( "%d! = %s\n",n, str)

}

}

return 0

}

while计算阶乘还是比较简单的,假设需要计算1到3的阶乘:

jiechen=1 #申明变量

for bb in `seq 1 3` #计算1到3的阶乘

do

jiechen=`expr ${bb} \* ${jiechen}` #循环结算

done

echo "10! = ${jiechen}" #打印结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8796593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-21
下一篇 2023-04-21

发表评论

登录后才能评论

评论列表(0条)

保存