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

#include<stdio.h>
main()
{
    int i,j,n;
    double sum1=0,sum2=0;
 
    printf("请输入一个奇数:");
    scanf("%d",&n);
 
    for (i=1;i<=n;i=i+2)
    {
        sum1=1;
        for (j=1;j<=i;j++)
        {
            sum1=sum1*j;
        }
        sum2=sum2+sum1;
     
    }
    printf("1!+3!+5!....+%d!=%lf\n",n,sum2);
 
}



在VC++中做的。。。。        
2009-08-08 15:31
tzzy
Rank: 1
来 自:皖浙
等 级:新手上路
帖 子:17
专家分:6
注 册:2009-8-7
收藏
得分:0 
如果n太大的话,用数组来做,这就变成了大数问题。。。

即使没有。。明天依然。。。
2009-08-08 16:54
xiaogu149162
Rank: 2
等 级:论坛游民
帖 子:47
专家分:97
注 册:2009-7-16
收藏
得分:0 
  #include<stdio.h>
                int fun(int m)
    {
    if(m==1)
    return 1;
    else
    return m*fun(m-1);
    }
void main()
{
    int sum=0,i,n,m;
 
    printf("Input:");
    scanf("%d",&n);
    for(m=1;m<=n;m++)
        {sum=sum+fun(m);}
    printf("sum=%d",sum);
    getch();
 
}
2009-08-08 18:17
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ ./outcome
1000
402790050531223457680670558292183044930441094551528966419334642920075902370082550849878938011122874840322664395727767319128483846892726398968790560901035018977865543415443376965144616549510538851077440410165819782073475583082079396504111380884916810768467471317168913183948275897490803646698793846190852594417739671786914563472162093180956284720843607311204509397095907530114810381703803860648328656344389023077975647748628886817466804724858587747840936784462436173977429991182753207302348016538494642001301432395279726745538178727708503090870745742249581124437084158031806471602854863650302741825130214652788342621283870175833906572656890104432413095171095723550851047360182700817666447833450097928957386876271765554137407111747666512309980678539886786878262902584539118231519316835523885400137767203426696953126303292828224235349134630280084480064650497764755473824102259453127730077777531063115138764952527597098445380046443997540925880086936317933421768424925084707414812932329166745886234137226923024813461900363225999464524935227947647167947434411637139203517404371214232998239493954562323327076903915931443305369962856388265027346155623332543302943446674383336900484885947609695640139797208838438493998636482572950930777919644406154624084228042985270573774543689565298092301062689807689071120317578510142181892798247199071452022029172707400688758980305702923813291544851703914211657597582497807598793035565731652297925769886549168450867091163868402442018371341022143349040941897422377931540131712376088451926646802255265721820332564453961091792448710886674897251899281432897966817352381951694370184383299109654078410356489144960977274480320655205474842571310858767154579079644215514199003832599232631020684528203955813111140473074686810426051322892063650122841004997271652977702547274337834459757112850838135183696311712170990224739928697694772853140476802033735594574707189941820656793611572800671948131128109558012358679446259496244143021997936801273888393102412918463505832701613704464047394891693567824946365095976820092895872874833067345472399549213736568277881574159120670765215962463587184455433922702506813953637742383768964226648365610070168839324749896910992390804658988479107678562550844858514512762455637677863067821690083222834405613388709119188719479181528190836888908152845729021513491658586509889455613570273121541638995145894561079999213500076101248781500642979091198044736325729107144579768273776743716439557581557253878204647391176582851167312182026188795156620056856503340092247479478684738621107994804323593105039052556442336528920420940313
wxjeacen@wxjeacen-laptop:~/linux/test_c++$

我写的BigInteger库。有米有可以拿出来check我的结果不对不对的。

生命不熄,战斗不止.
2009-08-08 21:39
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 24楼 wxjeacen

我写的是从1!+2!+....1000!的和。

生命不熄,战斗不止.
2009-08-08 21:41
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
哇, 你还厉害哦,我只能算出1000!,你要不要check下?
40238726007709377354370243392300398571937486421071463254379991042993851239862902
05920442084869694048004799886101971960586316668729948085589013238296699445909974
24504087073759918823627727188732519779505950995276120874975462497043601418278094
64649629105639388743788648733711918104582578364784997701247663288983595573543251
31853239584630755574091142624174743493475534286465766116677973966688202912073791
43853719588249808126867838374559731746136085379534524221586593201928090878297308
43139284440328123155861103697680135730421616874760967587134831202547858932076716
91324484262361314125087802080002616831510273418279777047846358681701643650241536
91398281264810213092761244896359928705114964975419909342221566832572080821333186
11681155361583654698404670897560290095053761647584772842188967964624494516076535
34081989013854424879849599533191017233555566021394503997362807501378376153071277
61926849034352625200015888535147331611702103968175921510907788019393178114194545
25722386554146106289218796022383897147608850627686296714667469756291123408243920
81601537808898939645182632436716167621791689097799119037540312746222899880051954
44414282012187361745992642956581746628302955570299024324153181617210465832036786
90611726015878352075151628422554026517048330422614397428693306169089796848259012
54583271682264580665267699586526822728070757813918581788896522081643483448259932
66043367660176999612831860788386150279465955131156552036093988180612138558600301
43569452722420634463179746059468257310379008402443243846565724501440282188525247
09351906209290231364932734975655139587205596542287497740114133469627154228458623
77387538230483865688976461927383814900140767310446640259899490222221765904339901
88601856652648506179970235619389701786004081188972991831102117122984590164192106
88843871218556461249607987229085192968193723886426148396573822911231250241866493
53143970137428531926649875337218940694281434118520158014123344828015051399694290
15348307764456909907315243327828826986460278986432113908350621709500259738986355
42771967428222487575867657523442202075736305694988250879689281627538488633969099
59826280956121450994871701244516461260379029309120889086942028510640182154399457
15680594187274899809425474217358240106367740459574178516082923013535808184009699
63725242305608559037006242712434169090041536901059339838357779394109700277534720
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000
2009-08-09 11:09
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
要是有哪个数字不小心错了,一定要告诉我哦!
2009-08-09 11:10
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
以下是引用wxjeacen在2009-8-8 21:41的发言:回复 24楼 wxjeacen我写的是从1!+2!+....1000!的和。

我的程序从1!+2!+...+n!,结果和你的一样,不过算的时间在5~6秒左右,不知道你的时间是多少???能否把你的程序发出来共享一下

#include <stdio.h>
#include <stdlib.h>

#define N 1000    //要计算的N

int s[4*N]={1,1};

void factorial(int s[],int n)
{
 s[0]=1;s[1]=1;
 int t=2,a=1,b=0,p=10;
 for(int i=2;i<4*N;++i)
    s[i]=0;
 for(;;)
    {
     b+=s[a]*t;
     s[a]=b%p;
     b/=p;
     if((*s==a)&&b)
       (*s)++;
       ++a;
       if(a>*s)
         if(++t<=n) {b=0;a=1;}
           else break;
    }
}
 
void add(int sum[],int s[])
{
 for(int i=1;i<=s[0];++i)
    if((sum[i]+=s[i])>9) {sum[i]%=10,sum[i+1]++;}
}

int main()
{
 int i=2;
 int sum[4*N]={1,1};
 for(;i<=N;++i)
    {
     factorial(s,i);
     add(sum,s);
    }
 for(i=s[0];i>0;--i)
    printf("%d",sum[i]);
 printf("\n");
 system("pause");
 return 0;
}
2009-08-09 11:13
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 


我的程序是0.13 s算1000的阶.
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ make
g++ -fPIC -O2 -g -I./include/ -c src/main.cpp -o lib/main.o
ar crv ./lib/libcommon.a ./lib/common.o ./lib/BigInteger.o
r - ./lib/common.o
r - ./lib/BigInteger.o
g++ -O2 -g -o bin/outcome lib/main.o ./lib/libcommon.a
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ ./outcome
1000
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610
197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462
497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463
075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085
379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320
767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244
896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421
889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849
034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476
088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289
988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751
516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858
178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435
694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513
958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222
221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646
124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118
520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863
554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244
516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829
230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000
Run Time:0.13 s

生命不熄,战斗不止.
2009-08-09 11:28
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
以下是引用wxjeacen在2009-8-9 11:28的发言:我的程序是0.13 s算1000的阶.
我说的是1!+2!+...1000!用的时间,我改了一下,帮我测试一下下面的要用多少时间..好像不超过2秒了..
#include <stdio.h>
#include <stdlib.h>

#define N 1000    //要计算的N
#define P 10000
long s[N]={1,1},t,a,b;

void factorial(long s[],long n)
{
 s[0]=1;s[1]=1;
 t=2,a=1,b=0;
 for(int 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[])
{
for(int i=1;i<=s[0];++i)
    if((sum[i]+=s[i])>9999) {sum[i]%=10000,sum[i+1]++;}
}

int main()
{
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);   
system("pause");
return 0;
}

[ 本帖最后由 godbless 于 2009-8-9 11:38 编辑 ]
2009-08-09 11:33
快速回复:求助,C语言编写求值1!+3!+5!....+n!
数据加载中...
 
   



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

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