论坛: 编程破解 标题: 如果一般的方法肯定会溢出的求阶层的算法 复制本贴地址    
作者: lovejiang [lovejiang]    论坛用户   登录
呵呵
请教一个问题的算法
s=1!+2!+3!+4+----+100!
如果用一般的方法
肯定会溢出



地主 发表时间: 04-04-05 20:48

回复: lida1818 [lida1818]   论坛用户   登录
还好只是算到100!,不然我的CPU得烧了


main()
{
long s[23],t[23],a,b,c,g=0,e,f,k=0,p=10000000;
int x,y;

for (x=22;x>=0;s[x]=0,x--);

for (f=1;f<=100;f++)
{  for (x=22;x>=0;t[x]=0,x--);
    t[22]=1;
    for (e=1;e<=f;e++)
      for(x=22;x>=0;c=t[x],c*=e,a=c/p,b=c%p,t[x]=b+g,g=a,x--);
    for(y=22;y>=0;c=t[y]+s[y],a=c/p,b=c%p,s[y]=b+k,k=a,y--);
}
printf("%ld",s[0]);
for(x=1;x<=22;printf("%.7ld",s[x]),x++);
getch();
}

B1层 发表时间: 04-04-05 23:30

回复: sniper167 [sniper167]   论坛用户   登录
老兄,加点注释行吗?
我啥都不会呀!

B2层 发表时间: 04-04-06 10:00

回复: lovejiang [lovejiang]   论坛用户   登录
是啊
我也看不懂呢

B3层 发表时间: 04-04-06 12:26

回复: lida1818 [lida1818]   论坛用户   登录
看不懂没关系
这是最差劲的算法

B4层 发表时间: 04-04-06 12:57

回复: yingzike [yingzike]   论坛用户   登录
总比没算法好呀
也许就是有最有效的达到目的呢

B5层 发表时间: 04-04-06 13:50

回复: sniper167 [sniper167]   论坛用户   登录
知道了总比没有好呀

B6层 发表时间: 04-04-06 15:17

回复: lovejiang [lovejiang]   论坛用户   登录
这倒是的
谢谢了呵呵

B7层 发表时间: 04-04-06 18:31

回复: lida1818 [lida1818]   论坛用户   登录
不好意思注解,一个很烂的算法。


上面的程序就等价下的程序

#define STRMAX 23
#define FLOG 10000000
main()
{
long s[STRMAX];  /* 这个是存放和的数组*/
long t[STRMAX]; /*这个是计算N!时用的数组*/
long a,b,c,g=0;
long e,f;
long h,i,j,k=0;
int x,y;

for (x=STRMAX-1;x>=0;x--)s[x]=0;

for (f=1;f<=100;f++)
{  for (x=STRMAX-1;x>=0;x--)t[x]=0;
    t[STRMAX-1]=1;
    for (e=1;e<=f;e++)
        for(x=STRMAX-1;x>=0;x--)  /* 计算N! */
        {
        c=t[x],c*=e;/*这里本来还应该加个if语句,这样就可以少运算很多次*/
        a=c/FLOG; /* 要进位的数,准备放入t[x+1]*/
        b=c%FLOG; /* 要放入t[x]中的数*/
        t[x]=b+g;
        g=a;逻辑     
        }
  for(y=STRMAX-1;y>=0;y--)    /*计算S(N)=S(N-1)+N!*/
  {/*这里也应该加个if语句,减少运算次数*/
  h=t[y]+s[y];
  i=h/FLOG; /* 要进位的数,准备放入s[y+1]*/
  j=h%FLOG; /* 要放入t[x]中的数*/
  s[y]=j+k;
  k=i;
  }

}
printf("%ld",s[0]);
for(x=1;x<=STRMAX-1;x++)printf("%.7ld",s[x]);

getch();

}





[此贴被 烟雨平生(lida1818) 在 04月06日20时28分 编辑过]

B8层 发表时间: 04-04-06 20:15

回复: sniper167 [sniper167]   论坛用户   登录
TO:烟雨平生 [lida1818]          太谦虚了!!!

感谢了!!!

B9层 发表时间: 04-04-06 20:42

回复: snntss [snntss]   论坛用户   登录
平生你真强啊,这回我看懂了,谢了!!

B10层 发表时间: 04-04-07 15:33

回复: lovejiang [lovejiang]   论坛用户   登录
to: 烟雨平生 [lida1818
thanks very much

B11层 发表时间: 04-04-07 18:09

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号