鱼C论坛

 找回密码
 立即注册
查看: 9430|回复: 71

题目8:找出这个1000位数字中连续13个数字乘积的最大值

[复制链接]
发表于 2015-4-21 00:10:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2017-6-11 06:20 编辑
Largest product in a series

The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450


Find the thirteen adjacent digits in the 1000-digit number that have the greatest product.

What is the value of this product?


题目:

找出以下这个 1000 位的整数中连续 13 个数字的最大乘积。

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
  


评分

参与人数 1贡献 +3 收起 理由
cwhsmile + 3 (乘积23514624000, 位置197)用时0.05s

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-12 13:52:14 | 显示全部楼层
数字稍大,不过没关系,Python有大数运算。
  1. blgNum=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
  2. var = 1
  3. i = 1
  4. while i<=13:
  5.         big2 = blgNum-i
  6.         var *= big2
  7.         i+=1
复制代码



运算的结果(太恐怖了):
  1. 172231209397853323538927780815567097015069802729773963867099703491567883214781873641005279501534757032793862795217130906384599026105024537900028041770358256659342004831748727652878149481150236714980405125835365717090349418344243181202815935608215934572991951377798622647403975151886826543310829642656059144047682802966814417839771397661112218727375306526461485750946235426201800265043163613839323358955773003228775647499588757986060539314109327911375066989738649886831417475233239842624467456636859687740147201919976550124452349660189463896166936295198003432478615551646615172551377574044390487532928576516932697777718435342675594303215066354103781961950174213467341442695287961376342457456232280310400659323956783758561055556221669828987855021901414846388732980548805763163800779079243173770272092541187349163352784051043186548670759249269050152118290975117800616647886211601131095408623900705856615318621950968083303757837423150179905266636269455853888112595183619920384498785069645521487652295255903162285020333688930841387615805553946170868949722064194116568693602618048369112083562234847188676232582304157467801304773398424283743248406197653251443196766230293674319147333796994400976581250263129608274706704591289423529469563606309631203862854653497986245615995800472242517450464539798548221977610316445364702962501827205761300135159608558290322929817844190076071858650807155680837765764262987054559542559576168862355682025078321009074670553369260585145823537255710310585569249349192500984359347016368713777733652323029488327445828599240326149172907693521696665938630771795759826720398008616696322041174248280614966794451081729831649307045776742702718423815767678153760749119322251772272181396337133520881178044063127707844903559559405531619279490883109068891608877249483589863467657256857582440579553342078942084987027972254016837949362036082282983523722157975070879500924936463299313982482847609215165212494282906059293745260104509611377557872276185125030008937382627036608680213696602549256905327998428217273802578993298834477984487417814782754880643767502384397315320948521712487305344706643635914101990744431100052911327044604340559837712218725731563376507145280722483268938634912639680965516708301393164731627809799140746540209297244313300795417883325216379777615506643677089960720628271627597763220911000699805512637216084312431091801737463920019371970131367658438848238032902352928225127957715129207139948874672996946156236809693136678771592113329882905071056463254942751110632217451852509852280746626541955960864281007739413223840034549904138263769509426526427069109010969663928334810717098693154356670369894579153056268101663649778106562428106799960887748633442956328917845347474002239125801373565003429818048342930568638502890256461581876610071872802550548154359967420129744872177223269969685312757133364836158620185511991304890515179206429184063187362441062866367668640270949488785547092969461433469707504736080881224286030383969793072950470083790124291688426124856140347616116592493288797215538746602441286049206042590070829901480249625821747885531585218275797951128443828393218372947440354529055648771958733433574108468186897878613319581225376926010825481346013566337592783686623778312733019205309110395443633816978622451567834999968573320756801960610988915228132987560580695300042691181545878720985216844351275636103254024863115735834349131970254769106853182302072320988058715467749272181549618913796003363083071577973350154575032347524091280126930623960722461510361273254830564686805451793438256107151062851851841267482556475568785120329165168345407432621804972057588888957447193005178468231059018194343825711700906486360554829594361395838783569841508021162276721527341358222175469560554025255697132437545294916561814737958986940914836394582944176367528315872335763721883331818112285393624260105954465787412980396378823576634249355612343455516642893892422940946863771189033866158165635653695359052215843423341422784008178990618572193890607925090903653731850925402429410724566871015606860912979929190711706051180613039223220849572719889680859024396249483233091657308036883001913174599218426800654859727041608457033907859635555346340385815777763871297773809056253189314586589389002310573997478715557334553737617497025758852832973819258756271871027125276470445716814514036021932190500044330913297974035188056547796584556219969604567678423138965628983643585901510292623690341215093536337369283335914138044922762158143589854110063315291155870296288379137883093268337260252936115379753168617401195756114335220028029194885834947934433537404442708542833417804728702693865689590884827490980873637927834253671482778806510396290110584620752773847942181205578663276016362157041915193180976880119402633560308331668951448606156697284393341501098785058808081875564044396977689788662820891095173511420261630035370679708507904512239558099478158786438242477242490818112145614123483974324899812002831228724947687822535434045939155282832404480887706594916976671437019736611217483189847473472560453735420173292337013243405015418185980545647065855062513864040882915822671546664877008520721896124537567683666851326469286971795216676587871395613755157108572358223953726435851323041370489295693592378929285620158421431170058158358164802949857915765230719327399306078081100762382344107467380816513507172743712148406888499510359145589115667716532227087492187793303422734287517885797772165648648755882070219923042219873008677489642868054430910581468054767217870488442136245723410246882834188542934840168928291902123304043853462205899216738811470564344693812620164461505132894674425625551127530969668180211811158598221459525419327049203256223772233968090781088716287220314160625129339353981102747255622744960005786411178526386725898807807107327161423970770227655948704155334988472302496591521024071210829094244064043900399051272355688946618588147911798478472981977838321867034494578046645220066970776854137838327386671703354122169769100034046299551176397543659849481124264736017064804434509076076765381753912351787742527836893959393580140727179261703584507923482261088423924219382008997341200854786218911191765445403487363562107146103513735316447968108894515885445091198467491234472231041270819837924189774209782637440227380228081695590961005077385977070643094615337437405698112795357089408451161187605465455480537553857620708178785624495623918562842192606745025765392107603941974422719458698745166152054437228942377349338890006101843200884732570646649118975824350692978719892582632217653499162825849811868840037346814728946053505700224428640349713053889636309601636914255093253340195932230660670075593105009486450271660452215611428862106751759190728827170801794255511287551541461699954975168221130809801941615852915390119104260018699065511033871212990941979721592982661967506066301735853413471330578834039717708293094523574225241002500963096472088092152544913694335447683406147483754557880237333333632268232074619900288818124318519894129655087871630963750268638308257456940339817312888599449964618435382117008077901018889834363504603980774745389626528397264692085957675624583272964880488661323659060080036144752458435503805672884852175747949298440557255075402763230816574810623050273071700138292586945185739956325289288154202358210256323028488127226735464577239637805941769287324652408783199226816834716920980648606265539876961022025794706124102976984425528277605952018759284613665218776431954735664307368611203961893958853269551410175191324830961005385279445288542307539330466247269745503484532186652849898819924273131338100624208386927158198813490649473687843324910531467123887188092866522024193220318943443486244937330079157998800472853262400605466604136100325064506453405018770427720798537061516923750691856786535310688686912017433356979172849951868997878720761473123625960117778028975083026713618202023066955894560521490840355316002263587581429503227065616588003348093720025654751891729690299251233765006195594370584220752025871174751822039752258556469471091113207871987659142060999955108535702270860796527456800255562625457476886747318505810320737683916065069764996027666407799561318845610121080816773394964645530981816978823126220497848660966212873583091598053830221440700292005076307259070079371426460746310273649850850621876425922556815939447489277043203599501357649312419661363546321506724436379989823716760066704150354254417055528806120975274720516758913534008744537103291070711514635106159168998206710811513051803645235244178034007408003725314718069000676515572187287139921265359998452944529403904819604947061440067110580761098783439943569227772570122760805748850782199940815891113451129297642294960459951354574150815477111000604143719125059220876403749658815125279739961612228996311096496906346184279804437133196329315683523135911674497423386246425770521293951636829681673919824778953177140638449741778854208938468879683249658307108154177774656721678718725757333686699576878888507845143994472072367860581603509370179573657686399224692801038455563939233545918707989146748170506131135341762218068104547913703633172494283818348733702932997349812552384717870721607007920169491906291952869375386634786722807025796951373566278182405738317970811932007779393318989026778771544139160202347084862496586917479958343258607773647146694851585384252050488228739332828903190889684945986788138581924450134167588635373221099750333198495481996847526153830487794289365838182442792097541491549604506470087331135582882130240026274289115398019046267634187276957991381834879783113357507568784322384876815782359502334468938567805907902186211208247615126562350688932917997339017409318079369144035523676896373762684242712393877232164127955771584271143297324561843156177797558511548873057789452833417254630810777377965590924721563965128585975596935781233207802680294625101363083869987924439335329535659905483346758726795172790797703241011038564558677843960145960396429981320463803716035421629864450410603325519729791021563257337772289302832096292655595296773315498404835128286038195088367405388058216166205655138284510011332513311039118546290168918922454919475634838185839021629299512438742060111075480556201552547005973025132699034841872560202716837708674299091330283795502560924431414294006037659131879000001652790750952829318723310715885446741813149970216978649978577516959478738326085057850251784544656751195043099794716793501840861388357745827789122749114569131591843474389973851223157535732523566576806471473851622324849743358961433752795134681818950623308607859161790755697949977642914758215001803902006758564814236294244762456529550795354849372457779321957408528316227665476846546558492102038974704646454017515960514143682865351010545703956045993524900150236396575263368024839039116749043928673311861063671493233647516996675110083174184090943374742487280830742884421869287990546701484019196192030237096373943294632632468391816647188111507580569255853993962183530453915579979813998442556766011665729123070941297978397447130007938847745067824022948370183225117473969986828838714009878253665292978326721913172038603375916553242436914195694210399712954438479080577642283855812788381647645885487770637223169982438876645655312876537957498679773966067157092589166695894761028186018214437300178901037841634110093454152728315725609063921610464738521236063307165305801667428878001736613683974360901802116679096678012422655618831151143536796560137247982351863055178840212351339860736258540233549658964020889706443100334694625514694520770003370725024006162334002052633194084954181077996314963232185581090736368790796183858526089316070023305373378810218321753894116132741714123213765541590096055225906004556953390050849369423039705690615899327209303549957144551620042118827121965317082647010970892087476916802390720463240104233193040586361522570104975858396444737741410195561154476851709484039324804486645451447795441634249264421345188309721386961520874578429067378290946778675639971482794375225282421893153145056323566376814592463693371255196302939090978966050445343056020025148172543479919732048912775779334819099601551274995716031064315589522846708770177386205711411206779247905893797002798455470850900612196112475455291672694436986998403137484332810194530912304627158122109479919598989900113489714971515091790140563204437922155844575996914344244147709125799632082728039062239170048019274361531257376587001928803206012791554887782906033747584084658595235453705859541949624673481181402242770371179821859698099024591435997484695617091517274826801700905185052872523271505262723620487385815766990905521468183071994284322347038240390036247075006845400213885240755260080049143943307127269839217694793253310316294145631154791167836129917638928301110227751328990159103434006978182226700290250046957797607994749000443077206622257011467499116312699343246575102390179883320530200200753143950901184579793031426472643116674108955395855241497571758217205031584874758989211940166592975592701459176310594797782252944484594463748223923868628305515400589992384152245938394877080612680711521575738635020983772016917735636691841556154655027200
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 3

使用道具 举报

发表于 2015-7-12 15:36:01 | 显示全部楼层
无名侠 发表于 2015-7-12 13:52
数字稍大,不过没关系,Python有大数运算。

9的13次方才等于2541865828329.你这结果........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 16:33:51 | 显示全部楼层
翅膀团 发表于 2015-7-12 15:36
9的13次方才等于2541865828329.你这结果........

不好意思。题目理解错了。
有一段英文楼主没翻译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 17:44:44 | 显示全部楼层
本帖最后由 翅膀团 于 2015-11-16 14:11 编辑

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

#define NUM 1001

int main(void)
{
        FILE *fp;
        char num[NUM];
        int i=0,j,max=0,a=1,b;
        int q[14],jc;

        if( !(fp = fopen("1.txt","rt")))    //由于字符串太长只能放到文件中读取了。
        {
            printf("读入失败!");
            exit(1);
        }

        fgets(num,NUM,fp);

        while( num  != EOF )
        {
        for(j=0;j<13;j++)
        {
            b = num - '0';

            if(b == 0)
            {
            i++;
            goto END;
            }
            
            a = a * b;
            i++;
        }

        if( max < a )
        {
            jc = i - 1;
            for(j=13;j!=0;j--)
            {
                q[j] = num[jc] - '0';
                jc--;
            }
            max = a;
        }
      
        i = i-12;
END:
        a = 1;
        }

        printf("%d %d %d %d %d %d %d %d %d %d %d %d %d = %d\n",q[1],q[2],q[3],q[4],q[5],q[6],q[7],q[8],q[9],q[10],q[11],q[12],q[13],max);
        printf("i=%d\n",jc);
        fclose(fp);

        system("pause");

}

如果有错误希望指出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-19 22:10:14 | 显示全部楼层
  1. #include<stdio.h>
  2. void max(int*i,int*j) //定义max函数使使最大值放入sum2中
  3. {
  4.         int t;
  5.         if(*i>*j)
  6.         {
  7.                 t = *i;
  8.                 *i = *j;
  9.                 *j = t;
  10.         }
  11. }
  12. void main()
  13. {
  14.         char i[1001]={"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};
  15.         char * p = i;
  16.         int i1,i2,i3,i4,i5,j,sum1,sum2 = 0;
  17.         for(j = 0;j<=995;j++) //取出5个字符
  18.         {
  19.                 i1 = (int)(*(p+j))-48; //(int) 不是把 "1" 转换成 1 而是转换成 "1:的ASCII 所以必须减去48
  20.                 i2 = (int)(*(p+j+1))-48;
  21.                 i3 = (int)(*(p+j+2))-48;
  22.                 i4 = (int)(*(p+j+3))-48;
  23.                 i5 = (int)(*(p+j+4))-48;
  24.                 //printf("%d %d %d %d %d ",i1,i2,i3,i4,i5);  
  25.                 sum1 = i1*i2*i3*i4*i5;
  26.                 max(&sum1,&sum2);
  27.         }
  28.         printf("%d\n\n",sum2);
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-23 20:46:52 | 显示全部楼层
  1. #python 2.7.11

  2. num = '''73167176531330624919225119674426574742355349194934
  3. 96983520312774506326239578318016984801869478851843
  4. 85861560789112949495459501737958331952853208805511
  5. 12540698747158523863050715693290963295227443043557
  6. 66896648950445244523161731856403098711121722383113
  7. 62229893423380308135336276614282806444486645238749
  8. 30358907296290491560440772390713810515859307960866
  9. 70172427121883998797908792274921901699720888093776
  10. 65727333001053367881220235421809751254540594752243
  11. 52584907711670556013604839586446706324415722155397
  12. 53697817977846174064955149290862569321978468622482
  13. 83972241375657056057490261407972968652414535100474
  14. 82166370484403199890008895243450658541227588666881
  15. 16427171479924442928230863465674813919123162824586
  16. 17866458359124566529476545682848912883142607690042
  17. 24219022671055626321111109370544217506941658960408
  18. 07198403850962455444362981230987879927244284909188
  19. 84580156166097919133875499200524063689912560717606
  20. 05886116467109405077541002256983155200055935729725
  21. 71636269561882670428252483600823257530420752963450'''


  22. b = num.replace('\n','')

  23. maxprod  = 0



  24. for i in range(1000):
  25.     product = 1
  26.     for j in range(13):
  27.         product *= int(b[i+j])
  28.         if product == 0:
  29.             break
  30.     if product > maxprod:
  31.         maxprod = product
  32.         maxi = i


  33. print maxprod
  34.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-11 13:08:13 | 显示全部楼层
  1. num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
  2. l = []
  3. for i in range(0,len(num)-12):
  4.     n = int(num[i])*int(num[i+1])*int(num[i+2])*int(num[i+3])*int(num[i+4])*int(num[i+5])*int(num[i+6])*int(num[i+7])*int(num[i+8])*int(num[i+9])*int(num[i+10])*int(num[i+11])*int(num[i+12])
  5.     l.append(n)
  6. print(max(l))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-13 17:15:09 | 显示全部楼层
  1. num1='''73167176531330624919225119674426574742355349194934
  2. 96983520312774506326239578318016984801869478851843
  3. 85861560789112949495459501737958331952853208805511
  4. 12540698747158523863050715693290963295227443043557
  5. 66896648950445244523161731856403098711121722383113
  6. 62229893423380308135336276614282806444486645238749
  7. 30358907296290491560440772390713810515859307960866
  8. 70172427121883998797908792274921901699720888093776
  9. 65727333001053367881220235421809751254540594752243
  10. 52584907711670556013604839586446706324415722155397
  11. 53697817977846174064955149290862569321978468622482
  12. 83972241375657056057490261407972968652414535100474
  13. 82166370484403199890008895243450658541227588666881
  14. 16427171479924442928230863465674813919123162824586
  15. 17866458359124566529476545682848912883142607690042
  16. 24219022671055626321111109370544217506941658960408
  17. 07198403850962455444362981230987879927244284909188
  18. 84580156166097919133875499200524063689912560717606
  19. 05886116467109405077541002256983155200055935729725
  20. 71636269561882670428252483600823257530420752963450'''
  21. list1=list(num1)
  22. n=len(list1)
  23. summax=0
  24. for i in range(12,n):
  25.     k=0
  26.     sum1=1
  27.     for j in range(0,12):
  28.         if list1[i-j]=='\n': k=1
  29.         sum1*=int(list1[i-j-k])
  30.     summax=max(sum1,summax)
  31. print(summax)
复制代码


4702924800
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-11 08:53:35 | 显示全部楼层
最大是23514624000
对应的连续的13个数字是5576689664895

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. int main(void)
  5. {

  6.         char sum[]={"73167176531330624919225119674426574742355349194934"
  7.                 "96983520312774506326239578318016984801869478851843"
  8.                 "85861560789112949495459501737958331952853208805511"
  9.                 "12540698747158523863050715693290963295227443043557"
  10.                 "66896648950445244523161731856403098711121722383113"
  11.                 "62229893423380308135336276614282806444486645238749"
  12.                 "30358907296290491560440772390713810515859307960866"
  13.                 "70172427121883998797908792274921901699720888093776"
  14.                 "65727333001053367881220235421809751254540594752243"
  15.                 "52584907711670556013604839586446706324415722155397"
  16.                 "53697817977846174064955149290862569321978468622482"
  17.                 "83972241375657056057490261407972968652414535100474"
  18.                 "82166370484403199890008895243450658541227588666881"
  19.                 "16427171479924442928230863465674813919123162824586"
  20.                 "17866458359124566529476545682848912883142607690042"
  21.                 "24219022671055626321111109370544217506941658960408"
  22.                 "07198403850962455444362981230987879927244284909188"
  23.                 "84580156166097919133875499200524063689912560717606"
  24.                 "05886116467109405077541002256983155200055935729725"
  25.                 "71636269561882670428252483600823257530420752963450"
  26. };


  27.         char str[14],str2[14];//str2是保存哪13个数乘积最大
  28.         long long max=0,len,add=1;
  29.         len = strlen(sum);
  30.         char *p=sum;
  31.          
  32.         while(p<=sum+len-13)
  33.         {
  34.                 strncpy(str,p,13);
  35.                 str[13]=0;
  36.                 /* 计算13个数乘积 */
  37.                 for(int z=0;z<13;z++)
  38.                 {
  39.                         //cout<<str[z]-48<<endl;
  40.                         int k = str[z]-48;
  41.                         add=add*k;
  42.                 }
  43.                        
  44.                
  45.                 if(add>=max)
  46.                 {
  47.                         max=add;
  48.                         //保存最大的13个数
  49.                         strncpy(str2,p,13);
  50.                         str2[13]=0;
  51.                        
  52.                 }
  53.                  add=1;
  54.                 p++;//指针下移
  55.        
  56.         }
  57.         cout<<max<<endl;
  58.         cout<<str2;
  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-11 08:56:21 | 显示全部楼层

为什么我运行后是40824。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 19:57:14 | 显示全部楼层
  1. num = '''7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'''


  2. def compl(lst, maxl):
  3.     while 1 in lst:
  4.         lst.remove(1)
  5.     while 1 in maxl:
  6.         maxl.remove(1)

  7.     m = n = 1
  8.     for i in lst:
  9.         m *= i
  10.     for i in maxl:
  11.         n *= i
  12.     if m >= n:
  13.         return lst
  14.     else:
  15.         return maxl


  16. def getre(num):
  17.     l = len(num)
  18.     i = 0
  19.     maxl = lst = []

  20.     while i < l - 12:
  21.         x = num[i:i + 13]
  22.         if '0' in x:
  23.             i += 1
  24.             continue
  25.         lst = [int(a) for a in x]
  26.         maxl = compl(lst, maxl)
  27.         i += 1
  28.     s = 1
  29.     for i in maxl:
  30.         s *= i
  31.     return s

  32. print(getre(num))
复制代码


答案:23514624000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-15 01:34:28 | 显示全部楼层
感觉这题目的解题思路应该是先找0,如果连续13个数字中有0,就可以跳过了。这样可以大大提高运算速度。

结果是一样的,但是时间大大缩短:
  1. ==================== RESTART: C:\Python34\demo\Euler8.py ====================
  2. 23514624000
  3. 用时0.03秒
复制代码


代码:
  1. import time
  2. start = time.time()

  3. sn='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'

  4. def mutitime(sl,st,times):
  5.     mtm = int(sl[st])
  6.     for i in range(times-1):
  7.         mtm = mtm * int(sl[st+i+1])
  8.     return mtm

  9. def find0(sl,st,times):
  10.     flag = 1
  11.     for i in range(times):
  12.         if int(sl[st+i]) == 0:
  13.             flag = 0
  14.             break
  15.     return flag

  16. count = 1
  17. for j in range(len(sn)-13):
  18.     if find0(sn,j,13) == 1:
  19.         if count < mutitime(sn,j,13):
  20.             count = mutitime(sn,j,13)

  21. print (count)
  22.    
  23. end = time.time()

  24. print ("用时%.2f秒" % (end - start))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2016-10-8 11:53:37 | 显示全部楼层
  1. from functools import reduce

  2. def euler(x):
  3.     product_list = []
  4.     for i in range(len(str(x))-12):
  5.         product_list.append(reduce(lambda a,b:a*b,[int(str(x)[j]) for j in range(i,i+13)]))
  6.     return max(product_list)

  7. if __name__ == '__main__':                              print(euler(7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-3 19:05:19 | 显示全部楼层
  1. # Python 3.5
  2. # 实现求一个1000位数字组成的数中
  3. # 连续13位数乘积最大的序列及其乘积

  4. def largestProductInSeries(nSeries, lenCage):
  5.     product = []
  6.     indexs= []
  7.     series = []
  8.     strN = str(nSeries)
  9.     lensN = len(strN)
  10.    
  11.     for i in range(lensN + 1 - lenCage):
  12.         p = 1
  13.         for j in range(lenCage):
  14.             element = int(strN[i + j])
  15.             if element == 0:
  16.                 p = 0
  17.                 break
  18.             else:
  19.                 p *= element               
  20.         product.append(p)
  21.         series.append(strN[i:i + lenCage])

  22.     result = max(product)
  23.     iMax = product.index(result)
  24.     maxSer = int(series[iMax])
  25.     return maxSer, result


  26. nSeries = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
  27. lenCage = 13
  28. Result = largestProductInSeries(nSeries, lenCage)
  29. print('所求数中连续%d位数字乘积最大的数为:%d, 这个乘积为:%d'%(lenCage, Result[0],Result[1]))
复制代码


>>>
所求数中连续13位数字乘积最大的数为:5576689664895, 这个乘积为:23514624000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 15:41:22 | 显示全部楼层
  1. #找出某个1000位数的整数中连续13个数字的最大乘积

  2. #先定义一个把数字转换为列表的函数
  3. def f0(m):
  4.     n=m
  5.     list=[]
  6.     while n!=0:
  7.         list.append(n%10)
  8.         n=n//10
  9.     list.reverse()
  10.     return list



  11. def f1(m,n):
  12.     list0=f0(m)
  13.     lenth=len(list0)
  14.     s=0
  15.     for i in range(0,lenth-n+1):
  16.         m=1
  17.         for j in range(0,n):
  18.             m=m*list0[i+j]
  19.         if m>=s:
  20.             s=m
  21.     return s

  22. m=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

  23. x=f1(m,13)
  24. print(x)
  25.             
  26.             
  27.         
  28.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 09:24:01 | 显示全部楼层
本帖最后由 lyciam 于 2016-11-18 09:27 编辑


  1. import time
  2. t = time.clock()
  3. def euler08():
  4.     """
  5.     找出以下这个1000位整数中连续13个数字的最大乘积:
  6.     7316717653133062491922511967442657474235
  7.     5349194934969835203127745063262395783180
  8.     1698480186947885184385861560789112949495
  9.     4595017379583319528532088055111254069874
  10.     7158523863050715693290963295227443043557
  11.     66896648950445244523161731856403098711121
  12.     72238311362229893423380308135336276614282
  13.     80644448664523874930358907296290491560440
  14.     77239071381051585930796086670172427121883
  15.     99879790879227492190169972088809377665727
  16.     33300105336788122023542180975125454059475
  17.     22435258490771167055601360483958644670632
  18.     44157221553975369781797784617406495514929
  19.     08625693219784686224828397224137565705605
  20.     74902614079729686524145351004748216637048
  21.     44031998900088952434506585412275886668811
  22.     64271714799244429282308634656748139191231
  23.     62824586178664583591245665294765456828489
  24.     12883142607690042242190226710556263211111
  25.     09370544217506941658960408071984038509624
  26.     55444362981230987879927244284909188845801
  27.     56166097919133875499200524063689912560717
  28.     60605886116467109405077541002256983155200
  29.     05593572972571636269561882670428252483600
  30.     823257530420752963450
  31.     """
  32.    
  33.     bignum=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
  34.     tolist=list(str(bignum))
  35.     result = []
  36.     for i in range(len(tolist)-12):
  37.         temp = 1
  38.         for j in tolist[i:i+13]:
  39.             temp *= int(j)
  40.         result.append(temp)
  41.     return result
  42. print(max(euler08()),'time: ',time.clock()-t)
复制代码


23514624000 time:  0.013652690581872951
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-9 10:38:12 | 显示全部楼层
  1. # encoding:utf-8
  2. from time import time

  3. inputnums = '''73167176531330624919225119674426574742355349194934
  4. 96983520312774506326239578318016984801869478851843
  5. 85861560789112949495459501737958331952853208805511
  6. 12540698747158523863050715693290963295227443043557
  7. 66896648950445244523161731856403098711121722383113
  8. 62229893423380308135336276614282806444486645238749
  9. 30358907296290491560440772390713810515859307960866
  10. 70172427121883998797908792274921901699720888093776
  11. 65727333001053367881220235421809751254540594752243
  12. 52584907711670556013604839586446706324415722155397
  13. 53697817977846174064955149290862569321978468622482
  14. 83972241375657056057490261407972968652414535100474
  15. 82166370484403199890008895243450658541227588666881
  16. 16427171479924442928230863465674813919123162824586
  17. 17866458359124566529476545682848912883142607690042
  18. 24219022671055626321111109370544217506941658960408
  19. 07198403850962455444362981230987879927244284909188
  20. 84580156166097919133875499200524063689912560717606
  21. 05886116467109405077541002256983155200055935729725
  22. 71636269561882670428252483600823257530420752963450
  23. '''

  24. def euler007(N=13):
  25.     numbers = [int(i) for i in inputnums.replace('\n', '')]
  26.     l_tmp = []
  27.     max_result = 1
  28.     max_sublist = []
  29.     for i in range(0, len(numbers) - N):
  30.         temp = 1
  31.         l_tmp = numbers[i:i + N]
  32.         if min(l_tmp) == 0:
  33.             continue
  34.         for j in l_tmp:
  35.             temp *= j
  36.         if temp > max_result:
  37.             max_result = temp
  38.             max_sublist = l_tmp
  39.     print('最大乘积是:', max_result)   
  40.     print('最大乘积序列是:', max_sublist)        
  41. start = time()            
  42. euler007()
  43. print('cost %.3f sec' % (time() - start))
复制代码


最大乘积是: 23514624000
最大乘积序列是: [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
cost 0.002 sec
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-13 11:24:20 | 显示全部楼层
此代码使用matlab编程
Problem8所用时间为0.07055秒
Problem8的答案为23514624000
  1. %题目8:找出这个1000位数字中连续13个数字乘积的最大值
  2. function Output=Problem8(Input)
  3. tic
  4. if nargin==0
  5.     Input='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450';
  6. end
  7. Rank=zeros(1001-12);
  8. for ii=1:1001-13
  9.     Rank(ii)=prod(str2num(Input(ii:1:ii+12)')');%向量操作
  10. end
  11. Output=max(Rank);
  12. Output=Output(1);
  13. format long
  14. toc
  15. disp('此代码使用matlab编程')
  16. disp(['Problem8所用时间为',num2str(toc),'秒'])
  17. disp(['Problem8的答案为',num2str(Output)])
  18. end
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-2 17:41:39 | 显示全部楼层
  1. '''
  2. 思路:
  3. 枚举时同时从列表两端开始,在中间结束
  4. '''

  5. import time

  6. def largest_product(number=4):
  7.     '计算上述1000位数中连续number个数的乘积'
  8.     THOUSAND_DIGIT_NUMBER = '73167176531330624919225119674426574742355349194934\
  9. 96983520312774506326239578318016984801869478851843\
  10. 85861560789112949495459501737958331952853208805511\
  11. 12540698747158523863050715693290963295227443043557\
  12. 66896648950445244523161731856403098711121722383113\
  13. 62229893423380308135336276614282806444486645238749\
  14. 30358907296290491560440772390713810515859307960866\
  15. 70172427121883998797908792274921901699720888093776\
  16. 65727333001053367881220235421809751254540594752243\
  17. 52584907711670556013604839586446706324415722155397\
  18. 53697817977846174064955149290862569321978468622482\
  19. 83972241375657056057490261407972968652414535100474\
  20. 82166370484403199890008895243450658541227588666881\
  21. 16427171479924442928230863465674813919123162824586\
  22. 17866458359124566529476545682848912883142607690042\
  23. 24219022671055626321111109370544217506941658960408\
  24. 07198403850962455444362981230987879927244284909188\
  25. 84580156166097919133875499200524063689912560717606\
  26. 05886116467109405077541002256983155200055935729725\
  27. 71636269561882670428252483600823257530420752963450'
  28.     result = [1, []]
  29.     list_result = [[], []]
  30.     result_left = 1
  31.     result_right = 1
  32.     list_numbers = list(THOUSAND_DIGIT_NUMBER)
  33.     for i in range(0, len(list_numbers)):
  34.         list_numbers[i] = int(list_numbers[i])

  35.     for i in range(0, 500 + number // 2):
  36.         for j in range(0, number):
  37.             result_left *= list_numbers[i + j]
  38.             result_right *= list_numbers[999 - i - j]
  39.             list_result[0].append(list_numbers[i + j])
  40.             list_result[1].append(list_numbers[999 - i - j])
  41.         if result_left > result[0] and result_left > result_right:
  42.             result[0] = result_left
  43.             result[1] = list_result[0]
  44.         elif result_right > result[0] and result_right > result_left:
  45.             result[0] = result_right
  46.             result[1] = list_result[1]
  47.         result_left = 1
  48.         result_right = 1
  49.         list_result.clear()
  50.         list_result = [[], []]
  51.     return result

  52. start = time.clock()
  53. list_value = largest_product(13)
  54. print('最大乘积为%d' %list_value[0])
  55. print('连续13个数字为', list_value[1])
  56. end = time.clock()
  57. print('程序执行了%fs。' %(end - start))
复制代码

执行结果:
最大乘积为23514624000
连续13个数字为 [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
程序执行了0.005535s。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表