鱼C论坛

 找回密码
 立即注册
查看: 13534|回复: 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有大数运算。
blgNum=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
var = 1
i = 1
while i<=13:
        big2 = blgNum-i
        var *= big2
        i+=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[i]  != EOF )
        {
        for(j=0;j<13;j++)
        {
            b = num[i] - '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 | 显示全部楼层
#include<stdio.h>
void max(int*i,int*j) //定义max函数使使最大值放入sum2中
{
        int t;
        if(*i>*j)
        {
                t = *i;
                *i = *j;
                *j = t;
        }
}
void main()
{
        char i[1001]={"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};
        char * p = i;
        int i1,i2,i3,i4,i5,j,sum1,sum2 = 0;
        for(j = 0;j<=995;j++) //取出5个字符
        {
                i1 = (int)(*(p+j))-48; //(int) 不是把 "1" 转换成 1 而是转换成 "1:的ASCII 所以必须减去48
                i2 = (int)(*(p+j+1))-48;
                i3 = (int)(*(p+j+2))-48;
                i4 = (int)(*(p+j+3))-48;
                i5 = (int)(*(p+j+4))-48;
                //printf("%d %d %d %d %d ",i1,i2,i3,i4,i5);  
                sum1 = i1*i2*i3*i4*i5;
                max(&sum1,&sum2);
        }
        printf("%d\n\n",sum2);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


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

maxprod  = 0



for i in range(1000):
    product = 1
    for j in range(13):
        product *= int(b[i+j])
        if product == 0:
            break
    if product > maxprod:
        maxprod = product
        maxi = i


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

使用道具 举报

发表于 2016-6-11 13:08:13 | 显示全部楼层
num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
l = []
for i in range(0,len(num)-12):
    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])
    l.append(n)
print(max(l))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-13 17:15:09 | 显示全部楼层
num1='''73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''
list1=list(num1)
n=len(list1)
summax=0
for i in range(12,n):
    k=0
    sum1=1
    for j in range(0,12):
        if list1[i-j]=='\n': k=1
        sum1*=int(list1[i-j-k])
    summax=max(sum1,summax)
print(summax)

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

使用道具 举报

发表于 2016-8-11 08:53:35 | 显示全部楼层
最大是23514624000
对应的连续的13个数字是5576689664895
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(void)
{

        char sum[]={"73167176531330624919225119674426574742355349194934"
                "96983520312774506326239578318016984801869478851843"
                "85861560789112949495459501737958331952853208805511"
                "12540698747158523863050715693290963295227443043557"
                "66896648950445244523161731856403098711121722383113"
                "62229893423380308135336276614282806444486645238749"
                "30358907296290491560440772390713810515859307960866"
                "70172427121883998797908792274921901699720888093776"
                "65727333001053367881220235421809751254540594752243"
                "52584907711670556013604839586446706324415722155397"
                "53697817977846174064955149290862569321978468622482"
                "83972241375657056057490261407972968652414535100474"
                "82166370484403199890008895243450658541227588666881"
                "16427171479924442928230863465674813919123162824586"
                "17866458359124566529476545682848912883142607690042"
                "24219022671055626321111109370544217506941658960408"
                "07198403850962455444362981230987879927244284909188"
                "84580156166097919133875499200524063689912560717606"
                "05886116467109405077541002256983155200055935729725"
                "71636269561882670428252483600823257530420752963450"
};


        char str[14],str2[14];//str2是保存哪13个数乘积最大
        long long max=0,len,add=1;
        len = strlen(sum);
        char *p=sum;
         
        while(p<=sum+len-13)
        {
                strncpy(str,p,13);
                str[13]=0;
                /* 计算13个数乘积 */
                for(int z=0;z<13;z++)
                {
                        //cout<<str[z]-48<<endl;
                        int k = str[z]-48;
                        add=add*k;
                }
                        
                
                if(add>=max)
                {
                        max=add;
                        //保存最大的13个数
                        strncpy(str2,p,13);
                        str2[13]=0;
                        
                }
                 add=1;
                p++;//指针下移
        
        }
        cout<<max<<endl;
        cout<<str2;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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


def compl(lst, maxl):
    while 1 in lst:
        lst.remove(1)
    while 1 in maxl:
        maxl.remove(1)

    m = n = 1
    for i in lst:
        m *= i
    for i in maxl:
        n *= i
    if m >= n:
        return lst
    else:
        return maxl


def getre(num):
    l = len(num)
    i = 0
    maxl = lst = []

    while i < l - 12:
        x = num[i:i + 13]
        if '0' in x:
            i += 1
            continue
        lst = [int(a) for a in x]
        maxl = compl(lst, maxl)
        i += 1
    s = 1
    for i in maxl:
        s *= i
    return s

print(getre(num))

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

使用道具 举报

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

结果是一样的,但是时间大大缩短:
==================== RESTART: C:\Python34\demo\Euler8.py ====================
23514624000
用时0.03秒

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

sn='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'

def mutitime(sl,st,times):
    mtm = int(sl[st])
    for i in range(times-1):
        mtm = mtm * int(sl[st+i+1])
    return mtm

def find0(sl,st,times):
    flag = 1
    for i in range(times):
        if int(sl[st+i]) == 0:
            flag = 0
            break
    return flag

count = 1
for j in range(len(sn)-13):
    if find0(sn,j,13) == 1:
        if count < mutitime(sn,j,13):
            count = mutitime(sn,j,13)

print (count)
    
end = time.time()

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

使用道具 举报

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

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

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

使用道具 举报

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

def largestProductInSeries(nSeries, lenCage):
    product = []
    indexs= []
    series = []
    strN = str(nSeries)
    lensN = len(strN)
    
    for i in range(lensN + 1 - lenCage):
        p = 1
        for j in range(lenCage):
            element = int(strN[i + j])
            if element == 0:
                p = 0
                break
            else:
                p *= element                
        product.append(p)
        series.append(strN[i:i + lenCage])

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


nSeries = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
lenCage = 13
Result = largestProductInSeries(nSeries, lenCage)
print('所求数中连续%d位数字乘积最大的数为:%d, 这个乘积为:%d'%(lenCage, Result[0],Result[1]))

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

使用道具 举报

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

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



def f1(m,n):
    list0=f0(m)
    lenth=len(list0)
    s=0
    for i in range(0,lenth-n+1):
        m=1
        for j in range(0,n):
            m=m*list0[i+j]
        if m>=s:
            s=m
    return s

m=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

x=f1(m,13)
print(x)
            
            
        
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


import time
t = time.clock()
def euler08():
    """
    找出以下这个1000位整数中连续13个数字的最大乘积:
    7316717653133062491922511967442657474235
    5349194934969835203127745063262395783180
    1698480186947885184385861560789112949495
    4595017379583319528532088055111254069874
    7158523863050715693290963295227443043557
    66896648950445244523161731856403098711121
    72238311362229893423380308135336276614282
    80644448664523874930358907296290491560440
    77239071381051585930796086670172427121883
    99879790879227492190169972088809377665727
    33300105336788122023542180975125454059475
    22435258490771167055601360483958644670632
    44157221553975369781797784617406495514929
    08625693219784686224828397224137565705605
    74902614079729686524145351004748216637048
    44031998900088952434506585412275886668811
    64271714799244429282308634656748139191231
    62824586178664583591245665294765456828489
    12883142607690042242190226710556263211111
    09370544217506941658960408071984038509624
    55444362981230987879927244284909188845801
    56166097919133875499200524063689912560717
    60605886116467109405077541002256983155200
    05593572972571636269561882670428252483600
    823257530420752963450
    """
    
    bignum=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
    tolist=list(str(bignum))
    result = []
    for i in range(len(tolist)-12):
        temp = 1
        for j in tolist[i:i+13]:
            temp *= int(j)
        result.append(temp)
    return result
print(max(euler08()),'time: ',time.clock()-t)

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

使用道具 举报

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

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

def euler007(N=13):
    numbers = [int(i) for i in inputnums.replace('\n', '')]
    l_tmp = []
    max_result = 1
    max_sublist = []
    for i in range(0, len(numbers) - N):
        temp = 1
        l_tmp = numbers[i:i + N]
        if min(l_tmp) == 0:
            continue
        for j in l_tmp:
            temp *= j
        if temp > max_result:
            max_result = temp
            max_sublist = l_tmp
    print('最大乘积是:', max_result)   
    print('最大乘积序列是:', max_sublist)        
start = time()            
euler007()
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
%题目8:找出这个1000位数字中连续13个数字乘积的最大值
function Output=Problem8(Input)
 tic
if nargin==0
    Input='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450';
end
Rank=zeros(1001-12);
for ii=1:1001-13
    Rank(ii)=prod(str2num(Input(ii:1:ii+12)')');%向量操作
end
Output=max(Rank);
Output=Output(1);
format long
toc
disp('此代码使用matlab编程')
disp(['Problem8所用时间为',num2str(toc),'秒'])
disp(['Problem8的答案为',num2str(Output)])
end
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import time

def largest_product(number=4):
    '计算上述1000位数中连续number个数的乘积'
    THOUSAND_DIGIT_NUMBER = '73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450'
    result = [1, []]
    list_result = [[], []]
    result_left = 1
    result_right = 1
    list_numbers = list(THOUSAND_DIGIT_NUMBER)
    for i in range(0, len(list_numbers)):
        list_numbers[i] = int(list_numbers[i])

    for i in range(0, 500 + number // 2):
        for j in range(0, number):
            result_left *= list_numbers[i + j]
            result_right *= list_numbers[999 - i - j]
            list_result[0].append(list_numbers[i + j])
            list_result[1].append(list_numbers[999 - i - j])
        if result_left > result[0] and result_left > result_right:
            result[0] = result_left
            result[1] = list_result[0]
        elif result_right > result[0] and result_right > result_left:
            result[0] = result_right
            result[1] = list_result[1]
        result_left = 1
        result_right = 1
        list_result.clear()
        list_result = [[], []]
    return result

start = time.clock()
list_value = largest_product(13)
print('最大乘积为%d' %list_value[0])
print('连续13个数字为', list_value[1])
end = time.clock()
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-12-22 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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