fydream 发表于 2004-11-1 22:01:36

关于对阶乘求和的问题!谢谢!

我现在想认真学习C语言!我刚刚起步,不免有些很笨的问题,谢谢兄弟们的指教!
这是关于对阶乘求和的问题,题目是:
求1!+2!+3!+4!+5!+6!+7!+8!+9!.......+17!+18!+19!+20!
我写的代码是:
main()
{
int i,sum;
for(i=1,sum=0;i<=20;sum+=jiecheng(i),i++)
printf("%ld",sum);
}
int jiecheng (int n)
{
long a;
int n;
while(n<=20&&n>=1)
{a=20;n--;a*=(n-1);}
return(a);
}
编译凑合着通过了,但是运行后吓了我一跳!:)请看:
@fydream yuandaima]$ gcc -o fy 64.c
64.c: In function `jiecheng':
64.c:10: warning: declaration of `n' shadows a parameter
64.c:14:2: warning: no newline at end of file
[fydream@fydream yuandaima]$ ./fy
05181436103628721554430820725744259071803108861636270052414514884663292451814360569957966217723267358668725401047772154082902976880844129326584898447284[fydream@fydream yuandaima]$

谢谢兄弟们的帮助!:)

mozilla 发表于 2004-11-1 22:45:40

20的阶乘很大,long不够表达。


#include <stdio.h>
unsigned long long jiecheng(i)
{
    int j;
    unsigned long long k=1;
    for(j=i;j>1;j--)
      k=k*j;
    return k;
}

main(int argc,char **argv)
{
    int i;
    unsigned long long sum=0;
    for(i=1;i<=20;i++)
      sum=sum+jiecheng(i);
    printf("%llu\n",sum);
}

mozilla 发表于 2004-11-1 22:46:43

你打出的数字很长是因为你没加回车,所以连在一起了。

firemoth 发表于 2004-11-2 08:33:59

用递归

fydream 发表于 2004-11-2 12:42:29

欧!这下好了!:)谢谢兄弟!:)用无符号长整型定义!我记住了!谢谢!!!:)

hobby! 发表于 2004-11-2 22:51:42

对整型数我在保重一下:
int就是signed short int
signed int =-2^15>2^15
unsigned int 0>(2^16)-1
short int 大少和signed int一样大
unsigned short int 大少和 unsigned int一样大
long int=-2^31>(2^31)-1
unsigned long int =0>(2^32)-11

fydream 发表于 2004-11-20 16:36:01

好的!谢谢楼上的兄弟,帮助归纳!谢谢!:)

kelehy 发表于 2007-10-11 16:58:31

不知道有谁知道把上面的阶乘用java写一下啊

hobby! 发表于 2007-11-29 16:20:10

java与C++是一样的.java的各包,自己查一下资料,将自己觉得有用的记下来,相信对水平有所提高!
页: [1]
查看完整版本: 关于对阶乘求和的问题!谢谢!