题目8:找出这个1000位数字中连续13个数字乘积的最大值
本帖最后由 不二如是 于 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
数字稍大,不过没关系,Python有大数运算。
blgNum=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
var = 1
i = 1
while i<=13:
big2 = blgNum-i
var *= big2
i+=1
运算的结果(太恐怖了):
172231209397853323538927780815567097015069802729773963867099703491567883214781873641005279501534757032793862795217130906384599026105024537900028041770358256659342004831748727652878149481150236714980405125835365717090349418344243181202815935608215934572991951377798622647403975151886826543310829642656059144047682802966814417839771397661112218727375306526461485750946235426201800265043163613839323358955773003228775647499588757986060539314109327911375066989738649886831417475233239842624467456636859687740147201919976550124452349660189463896166936295198003432478615551646615172551377574044390487532928576516932697777718435342675594303215066354103781961950174213467341442695287961376342457456232280310400659323956783758561055556221669828987855021901414846388732980548805763163800779079243173770272092541187349163352784051043186548670759249269050152118290975117800616647886211601131095408623900705856615318621950968083303757837423150179905266636269455853888112595183619920384498785069645521487652295255903162285020333688930841387615805553946170868949722064194116568693602618048369112083562234847188676232582304157467801304773398424283743248406197653251443196766230293674319147333796994400976581250263129608274706704591289423529469563606309631203862854653497986245615995800472242517450464539798548221977610316445364702962501827205761300135159608558290322929817844190076071858650807155680837765764262987054559542559576168862355682025078321009074670553369260585145823537255710310585569249349192500984359347016368713777733652323029488327445828599240326149172907693521696665938630771795759826720398008616696322041174248280614966794451081729831649307045776742702718423815767678153760749119322251772272181396337133520881178044063127707844903559559405531619279490883109068891608877249483589863467657256857582440579553342078942084987027972254016837949362036082282983523722157975070879500924936463299313982482847609215165212494282906059293745260104509611377557872276185125030008937382627036608680213696602549256905327998428217273802578993298834477984487417814782754880643767502384397315320948521712487305344706643635914101990744431100052911327044604340559837712218725731563376507145280722483268938634912639680965516708301393164731627809799140746540209297244313300795417883325216379777615506643677089960720628271627597763220911000699805512637216084312431091801737463920019371970131367658438848238032902352928225127957715129207139948874672996946156236809693136678771592113329882905071056463254942751110632217451852509852280746626541955960864281007739413223840034549904138263769509426526427069109010969663928334810717098693154356670369894579153056268101663649778106562428106799960887748633442956328917845347474002239125801373565003429818048342930568638502890256461581876610071872802550548154359967420129744872177223269969685312757133364836158620185511991304890515179206429184063187362441062866367668640270949488785547092969461433469707504736080881224286030383969793072950470083790124291688426124856140347616116592493288797215538746602441286049206042590070829901480249625821747885531585218275797951128443828393218372947440354529055648771958733433574108468186897878613319581225376926010825481346013566337592783686623778312733019205309110395443633816978622451567834999968573320756801960610988915228132987560580695300042691181545878720985216844351275636103254024863115735834349131970254769106853182302072320988058715467749272181549618913796003363083071577973350154575032347524091280126930623960722461510361273254830564686805451793438256107151062851851841267482556475568785120329165168345407432621804972057588888957447193005178468231059018194343825711700906486360554829594361395838783569841508021162276721527341358222175469560554025255697132437545294916561814737958986940914836394582944176367528315872335763721883331818112285393624260105954465787412980396378823576634249355612343455516642893892422940946863771189033866158165635653695359052215843423341422784008178990618572193890607925090903653731850925402429410724566871015606860912979929190711706051180613039223220849572719889680859024396249483233091657308036883001913174599218426800654859727041608457033907859635555346340385815777763871297773809056253189314586589389002310573997478715557334553737617497025758852832973819258756271871027125276470445716814514036021932190500044330913297974035188056547796584556219969604567678423138965628983643585901510292623690341215093536337369283335914138044922762158143589854110063315291155870296288379137883093268337260252936115379753168617401195756114335220028029194885834947934433537404442708542833417804728702693865689590884827490980873637927834253671482778806510396290110584620752773847942181205578663276016362157041915193180976880119402633560308331668951448606156697284393341501098785058808081875564044396977689788662820891095173511420261630035370679708507904512239558099478158786438242477242490818112145614123483974324899812002831228724947687822535434045939155282832404480887706594916976671437019736611217483189847473472560453735420173292337013243405015418185980545647065855062513864040882915822671546664877008520721896124537567683666851326469286971795216676587871395613755157108572358223953726435851323041370489295693592378929285620158421431170058158358164802949857915765230719327399306078081100762382344107467380816513507172743712148406888499510359145589115667716532227087492187793303422734287517885797772165648648755882070219923042219873008677489642868054430910581468054767217870488442136245723410246882834188542934840168928291902123304043853462205899216738811470564344693812620164461505132894674425625551127530969668180211811158598221459525419327049203256223772233968090781088716287220314160625129339353981102747255622744960005786411178526386725898807807107327161423970770227655948704155334988472302496591521024071210829094244064043900399051272355688946618588147911798478472981977838321867034494578046645220066970776854137838327386671703354122169769100034046299551176397543659849481124264736017064804434509076076765381753912351787742527836893959393580140727179261703584507923482261088423924219382008997341200854786218911191765445403487363562107146103513735316447968108894515885445091198467491234472231041270819837924189774209782637440227380228081695590961005077385977070643094615337437405698112795357089408451161187605465455480537553857620708178785624495623918562842192606745025765392107603941974422719458698745166152054437228942377349338890006101843200884732570646649118975824350692978719892582632217653499162825849811868840037346814728946053505700224428640349713053889636309601636914255093253340195932230660670075593105009486450271660452215611428862106751759190728827170801794255511287551541461699954975168221130809801941615852915390119104260018699065511033871212990941979721592982661967506066301735853413471330578834039717708293094523574225241002500963096472088092152544913694335447683406147483754557880237333333632268232074619900288818124318519894129655087871630963750268638308257456940339817312888599449964618435382117008077901018889834363504603980774745389626528397264692085957675624583272964880488661323659060080036144752458435503805672884852175747949298440557255075402763230816574810623050273071700138292586945185739956325289288154202358210256323028488127226735464577239637805941769287324652408783199226816834716920980648606265539876961022025794706124102976984425528277605952018759284613665218776431954735664307368611203961893958853269551410175191324830961005385279445288542307539330466247269745503484532186652849898819924273131338100624208386927158198813490649473687843324910531467123887188092866522024193220318943443486244937330079157998800472853262400605466604136100325064506453405018770427720798537061516923750691856786535310688686912017433356979172849951868997878720761473123625960117778028975083026713618202023066955894560521490840355316002263587581429503227065616588003348093720025654751891729690299251233765006195594370584220752025871174751822039752258556469471091113207871987659142060999955108535702270860796527456800255562625457476886747318505810320737683916065069764996027666407799561318845610121080816773394964645530981816978823126220497848660966212873583091598053830221440700292005076307259070079371426460746310273649850850621876425922556815939447489277043203599501357649312419661363546321506724436379989823716760066704150354254417055528806120975274720516758913534008744537103291070711514635106159168998206710811513051803645235244178034007408003725314718069000676515572187287139921265359998452944529403904819604947061440067110580761098783439943569227772570122760805748850782199940815891113451129297642294960459951354574150815477111000604143719125059220876403749658815125279739961612228996311096496906346184279804437133196329315683523135911674497423386246425770521293951636829681673919824778953177140638449741778854208938468879683249658307108154177774656721678718725757333686699576878888507845143994472072367860581603509370179573657686399224692801038455563939233545918707989146748170506131135341762218068104547913703633172494283818348733702932997349812552384717870721607007920169491906291952869375386634786722807025796951373566278182405738317970811932007779393318989026778771544139160202347084862496586917479958343258607773647146694851585384252050488228739332828903190889684945986788138581924450134167588635373221099750333198495481996847526153830487794289365838182442792097541491549604506470087331135582882130240026274289115398019046267634187276957991381834879783113357507568784322384876815782359502334468938567805907902186211208247615126562350688932917997339017409318079369144035523676896373762684242712393877232164127955771584271143297324561843156177797558511548873057789452833417254630810777377965590924721563965128585975596935781233207802680294625101363083869987924439335329535659905483346758726795172790797703241011038564558677843960145960396429981320463803716035421629864450410603325519729791021563257337772289302832096292655595296773315498404835128286038195088367405388058216166205655138284510011332513311039118546290168918922454919475634838185839021629299512438742060111075480556201552547005973025132699034841872560202716837708674299091330283795502560924431414294006037659131879000001652790750952829318723310715885446741813149970216978649978577516959478738326085057850251784544656751195043099794716793501840861388357745827789122749114569131591843474389973851223157535732523566576806471473851622324849743358961433752795134681818950623308607859161790755697949977642914758215001803902006758564814236294244762456529550795354849372457779321957408528316227665476846546558492102038974704646454017515960514143682865351010545703956045993524900150236396575263368024839039116749043928673311861063671493233647516996675110083174184090943374742487280830742884421869287990546701484019196192030237096373943294632632468391816647188111507580569255853993962183530453915579979813998442556766011665729123070941297978397447130007938847745067824022948370183225117473969986828838714009878253665292978326721913172038603375916553242436914195694210399712954438479080577642283855812788381647645885487770637223169982438876645655312876537957498679773966067157092589166695894761028186018214437300178901037841634110093454152728315725609063921610464738521236063307165305801667428878001736613683974360901802116679096678012422655618831151143536796560137247982351863055178840212351339860736258540233549658964020889706443100334694625514694520770003370725024006162334002052633194084954181077996314963232185581090736368790796183858526089316070023305373378810218321753894116132741714123213765541590096055225906004556953390050849369423039705690615899327209303549957144551620042118827121965317082647010970892087476916802390720463240104233193040586361522570104975858396444737741410195561154476851709484039324804486645451447795441634249264421345188309721386961520874578429067378290946778675639971482794375225282421893153145056323566376814592463693371255196302939090978966050445343056020025148172543479919732048912775779334819099601551274995716031064315589522846708770177386205711411206779247905893797002798455470850900612196112475455291672694436986998403137484332810194530912304627158122109479919598989900113489714971515091790140563204437922155844575996914344244147709125799632082728039062239170048019274361531257376587001928803206012791554887782906033747584084658595235453705859541949624673481181402242770371179821859698099024591435997484695617091517274826801700905185052872523271505262723620487385815766990905521468183071994284322347038240390036247075006845400213885240755260080049143943307127269839217694793253310316294145631154791167836129917638928301110227751328990159103434006978182226700290250046957797607994749000443077206622257011467499116312699343246575102390179883320530200200753143950901184579793031426472643116674108955395855241497571758217205031584874758989211940166592975592701459176310594797782252944484594463748223923868628305515400589992384152245938394877080612680711521575738635020983772016917735636691841556154655027200 无名侠 发表于 2015-7-12 13:52
数字稍大,不过没关系,Python有大数运算。
9的13次方才等于2541865828329.你这结果........ 翅膀团 发表于 2015-7-12 15:36
9的13次方才等于2541865828329.你这结果........
{:5_92:}不好意思。题目理解错了。
有一段英文楼主没翻译 本帖最后由 翅膀团 于 2015-11-16 14:11 编辑
#include <stdio.h>
#include <stdlib.h>
#define NUM 1001
int main(void)
{
FILE *fp;
char num;
int i=0,j,max=0,a=1,b;
int q,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 = num - '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,q,q,q,q,q,q,q,q,q,q,q,q,max);
printf("i=%d\n",jc);
fclose(fp);
system("pause");
}
如果有错误希望指出 #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={"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);
} #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)
if product == 0:
break
if product > maxprod:
maxprod = product
maxi = i
print maxprod
num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
l = []
for i in range(0,len(num)-12):
n = int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)*int(num)
l.append(n)
print(max(l)) 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=='\n': k=1
sum1*=int(list1)
summax=max(sum1,summax)
print(summax)
4702924800 最大是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,str2;//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=0;
/* 计算13个数乘积 */
for(int z=0;z<13;z++)
{
//cout<<str-48<<endl;
int k = str-48;
add=add*k;
}
if(add>=max)
{
max=add;
//保存最大的13个数
strncpy(str2,p,13);
str2=0;
}
add=1;
p++;//指针下移
}
cout<<max<<endl;
cout<<str2;
return 0;
} 牡丹花下死做鬼 发表于 2015-7-19 22:10
为什么我运行后是40824。。 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
if '0' in x:
i += 1
continue
lst =
maxl = compl(lst, maxl)
i += 1
s = 1
for i in maxl:
s *= i
return s
print(getre(num))
答案:23514624000 感觉这题目的解题思路应该是先找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)
for i in range(times-1):
mtm = mtm * int(sl)
return mtm
def find0(sl,st,times):
flag = 1
for i in range(times):
if int(sl) == 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))
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,) for j in range(i,i+13)]))
return max(product_list)
if __name__ == '__main__': print(euler(7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450)) # 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)
if element == 0:
p = 0
break
else:
p *= element
product.append(p)
series.append(strN)
result = max(product)
iMax = product.index(result)
maxSer = int(series)
return maxSer, result
nSeries = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
lenCage = 13
Result = largestProductInSeries(nSeries, lenCage)
print('所求数中连续%d位数字乘积最大的数为:%d, 这个乘积为:%d'%(lenCage, Result,Result))
>>>
所求数中连续13位数字乘积最大的数为:5576689664895, 这个乘积为:23514624000 #找出某个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
if m>=s:
s=m
return s
m=7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
x=f1(m,13)
print(x)
本帖最后由 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:
temp *= int(j)
result.append(temp)
return result
print(max(euler08()),'time: ',time.clock()-t)
23514624000 time:0.013652690581872951 # 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 =
l_tmp = []
max_result = 1
max_sublist = []
for i in range(0, len(numbers) - N):
temp = 1
l_tmp = numbers
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
最大乘积序列是:
cost 0.002 sec 此代码使用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
'''
思路:
枚举时同时从列表两端开始,在中间结束
'''
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 = ]
list_result = [[], []]
result_left = 1
result_right = 1
list_numbers = list(THOUSAND_DIGIT_NUMBER)
for i in range(0, len(list_numbers)):
list_numbers = int(list_numbers)
for i in range(0, 500 + number // 2):
for j in range(0, number):
result_left *= list_numbers
result_right *= list_numbers
list_result.append(list_numbers)
list_result.append(list_numbers)
if result_left > result and result_left > result_right:
result = result_left
result = list_result
elif result_right > result and result_right > result_left:
result = result_right
result = list_result
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)
print('连续13个数字为', list_value)
end = time.clock()
print('程序执行了%fs。' %(end - start))
执行结果:
最大乘积为23514624000
连续13个数字为
程序执行了0.005535s。