| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3463 人关注过本帖
标题:求助,C语言编写求值1!+3!+5!....+n!
只看楼主 加入收藏
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 30楼 godbless

你这代码不能当库来用。

生命不熄,战斗不止.
2009-08-09 11:48
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
你这代码,我怎么越看越觉得是那个什么飞燕的代码风格。。

生命不熄,战斗不止.
2009-08-09 11:50
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
其实就是飞燕的,我只不过加了加法而已...
2009-08-09 11:51
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
我的目标是创建一个大数库,里面不紧定义加和乘除。

还包括其他的一切算符操作。

比如求 *= ,/=, +=, %, %=, pow,自加,自减,求移位,求bool的比较关系等等一系列的。

相当于创建一个类型跟int类似的BigInteger.

不是只能用逻辑表示的输出算法。

生命不熄,战斗不止.
2009-08-09 11:57
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000    //要计算的N
#define P 10000
long s[N]={1,1},t,a,b;
void factorial(long s[],long n)
{
     int i;
     s[0]=1;s[1]=1;
     t=2,a=1,b=0;
     for(i=2;i<N;s[i]=0,++i);
     for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
      s[a]=(b+=s[a]*t)%P,b/=P;
}
void add(long sum[],long s[])
{
    int i;
     for( i=1;i<=s[0];++i)
      if((sum[i]+=s[i])>9999) {sum[i]%=10000,sum[i+1]++;}
}
int main()
{
     time_t start,end;
     int i=2;
    start=clock();
     long sum[N]={1,1};
     for(;i<=N;factorial(s,i),add(sum,s),++i);
     printf("%d",sum[s[0]]);
     for(i=s[0]-1;i>0;printf("%04d",sum[i]),--i);
    end=clock();
     printf("\nTime : %f s\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
     return 0;
}
wxjeacen@wxjeacen-laptop:~/linux/test_c++$

给你添加了的求时间的。
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ ./test
402790050531223457680670558292183044930441094551528966419334642920075902370082550849878938011122874840322664395727767319128483846892726398968790560901035018977865543415443376965144616549510538851077440410165819782073475583082079396504111380884916810768467471317168913183948275897490803646698793846190852594417739671786914563472162093180956284720843607311204509397095907530114810381703803860648328656344389023077975647748628886817466804724858587747840936784462436173977429991182753207302348016538494642001301432395279726745538178727708503090870745742249581124437084158031806471602854863650302741825130214652788342621283870175833906572656890104432413095171095723550851047360182700817666447833450097928957386876271765554137407111747666512309980678539886786878262902584539118231519316835523885400137767203426696953126303292828224235349134630280084480064650497764755473824102259453127730077777531063115138764952527597098445380046443997540925880086936317933421768424925084707414812932329166745886234137226923024813461900363225999464524935227947647167947434411637139203517404371214232998239493954562323327076903915931443305369962856388265027346155623332543302943446674383336900484885947609695640139797208838438493998636482572950930777919644406154624084228042985270573774543689565298092301062689807689071120317578510142181892798247199071452022029172707400688758980305702923813291544851703914211657597582497807598793035565731652297925769886549168450867091163868402442018371341022143349040941897422377931540131712376088451926646802255265721820332564453961091792448710886674897251899281432897966817352381951694370184383299109654078410356489144960977274480320655205474842571310858767154579079644215514199003832599232631020684528203955813111140473074686810426051322892063650122841004997271652977702547274337834459757112850838135183696311712170990224739928697694772853140476802033735594574707189941820656793611572800671948131128109558012358679446259496244143021997936801273888393102412918463505832701613704464047394891693567824946365095976820092895872874833067345472399549213736568277881574159120670765215962463587184455433922702506813953637742383768964226648365610070168839324749896910992390804658988479107678562550844858514512762455637677863067821690083222834405613388709119188719479181528190836888908152845729021513491658586509889455613570273121541638995145894561079999213500076101248781500642979091198044736325729107144579768273776743716439557581557253878204647391176582851167312182026188795156620056856503340092247479478684738621107994804323593105039052556442336528920420940313
Time : 2.150000 s



生命不熄,战斗不止.
2009-08-09 12:00
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
以下是引用wxjeacen在2009-8-9 12:00的发言:给你添加了的求时间的。
我以为不会超过两秒,谢谢你了..
2009-08-09 12:01
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 36楼 godbless

如果我要实现求%=操作,要怎么实现,用你那东西。

生命不熄,战斗不止.
2009-08-09 12:07
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
以下是引用CCVC果冻爽在2009-8-9 11:10的发言:要是有哪个数字不小心错了,一定要告诉我哦!
能不能check你的code

生命不熄,战斗不止.
2009-08-09 12:23
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我改了一下我的程序,计算1!+2!+3!+...1000!的结果只要0.062秒了...

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>
 
#define N 1000    //要计算的N  
#define P 10000
long s[N]={1,1},a=1,b=0;
 
void factorial(long s[],long n)
{
 for(;a<=*s;)  
    {  
     b+=s[a]*n;  
     s[a]=b%P;  
     b/=P;  
     if((*s==a)&&b)  
       (*s)++;  
     ++a;  
    }
 b=0,a=1;
}  
 
void add(long sum[],long s[])
{
 for(int i=1;i<=s[0];++i)
    if((sum[i]+=s[i])>9999) {sum[i]%=10000,sum[i+1]++;}
}
 
int main()
{  
 time_t start,end;
 start=clock();
 int i=2;
 long sum[N]={1,1};
 for(;i<=N;factorial(s,i),add(sum,s),++i);
 printf("%d",sum[s[0]]);
 for(i=s[0]-1;i>0;printf("%04d",sum[i]),--i);  
 end=clock();
 printf("\nTime : %f s\n",(double)(end-start)/(double)CLOCKS_PER_SEC);   
 system("pause");  
 return 0;  
}
2009-08-09 15:00
快速回复:求助,C语言编写求值1!+3!+5!....+n!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027678 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved