最大回文乘积

回文数就是从前往后和从后往前读都一样的数。由两个2位数相乘得到的最大回文乘积是 9009 = 91 × 99。找出由两个3位数相乘得到的最大回文乘积。
分析:没啥好的方法,就是通过循环一个个判断。

public class Maxhuiwen {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();    //获取开始时间
        huiwenSolution sl=new  huiwenSolution();
        System.out.println( sl.huiwen());
        long endTime = System.currentTimeMillis();    //获取结束时间
        System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
    }
}

class huiwenSolution {

    public int huiwen() {
        int max = 0;
        for (int i = 999; i > 100; i--) {
            for (int j = 999; j > 100; j--) {
                if (i * j > max && ishuiWen(i * j)) {
                    max = i * j;
                    if(max!=0)
                    {
                        System.out.printf("%d*%d=%d",i,j,max);
                        System.out.println();
                        break;//找到一个回文数,就结束内层循环,因为接下来就算回文数,也比这个数小,但是程序会接着执行外层循环
                    }
                }
            }

        }
        return max;
    }
/**
 * @Author houfeng
 * @Description //判断是不是回文数
 * @Date 12:16 2020/11/27
 * @Param [number]
 * @return boolean
 **/

    boolean ishuiWen(int number) {
        int length = String.valueOf(number).length();//获取整数位数
        int wei[] = new int[length];
        int temp = 0;
        int notequal = 0;
        for (int i = 0; i < length; i++) {
            temp = number % 10;//获取最后一位
            number = number / 10;//每次把number去掉最后一位
            wei[i] = temp;//相当于把原来的整数倒序放入数组
        }
        for (int i = 0; i < length / 2; i++) {
            if (wei[i] != wei[length - 1 - i]) {//判断数组的对称位是否相等
                notequal++;//不是回文数,标志位加1
                //return false;//这里可以直接返回false
            }
        }
        if (notequal == 0) {
            return true;//是回文数,返回true
        } else {
            return false;//不是回文数,返回false
        }
    }
}

总结知识点
java获取整数位数
int length = String.valueOf(number).length();//获取整数位数
获取最后一位数(相当于取余)
temp = number % 10;//获取最后一位

程序里面写多个return语句是因为有多个判断条件,编译器会考虑判断条件不满足的情况,也要求有一个返回值,程序在执行的时候,执行等到某一个return语句是程序就结束了,不用再考虑其他return 语句。

java输出多个变量: System.out.printf("%d*%d=%d",i,j,max);

break结束当前循环,当有多层循环是,break只能结束一层循环,就要看break的位置在哪了

995*583=580085
993*913=906609
906609
程序运行时间:18ms

方法2
在这里插入图片描述

解除i*j>max的限制,可以打印输出所有的回文数

995*583=580085
993*913=906609
991*121=119911
987*286=282282
982*869=853358
979*664=650056
978*418=408804
977*638=623326
975*539=525525
974*308=299992
971*484=469964
968*916=886688
966*858=828828
964*506=487784
963*187=180081
962*924=888888
961*363=348843
959*803=770077
958*682=653356
957*894=855558
955*605=577775
953*759=723327
952*286=272272
949*308=292292
946*888=840048
944*253=238832
941*242=227722
935*637=595595
933*605=564465
932*924=861168
929*506=470074
928*528=489984
927*748=693396
926*726=672276
925*627=579975
924*962=888888
922*517=476674
921*847=780087
917*429=393393
916*968=886688
915*561=513315
914*902=824428
913*993=906609
911*605=551155
909*902=819918
906*726=657756
905*561=507705
904*451=407704
903*187=168861
902*914=824428
897*924=828828
895*627=561165
894*957=855558
892*517=461164
888*946=840048
887*605=536635
886*484=428824
884*308=272272
883*682=602206
882*286=252252
881*121=106601
879*704=618816
878*319=280082
877*107=93839
874*759=663366
872*748=652256
871*847=737737
869*982=853358
868*946=821128
867*924=801108
866*103=89198
865*605=523325
863*869=749947
861*231=198891
858*966=828828
853*792=675576
849*407=345543
848*946=802208
847*921=780087
846*352=297792
845*693=585585
844*957=807708
843*605=510015
841*605=508805
836*836=698896
834*814=678876
833*715=595595
831*968=804408
825*703=579975
824*561=462264
823*451=371173
822*803=660066
819*913=747747
817*748=611116
816*103=84048
814*834=678876
813*451=366663
812*858=696696
808*792=639936
806*539=434434
805*715=575575
804*814=654456
803*959=770077
801*473=378873
794*869=689986
792*853=675576
791*715=565565
789*814=642246
786*352=276672
782*341=266662
781*108=84348
779*308=239932
777*858=666666
775*737=571175
774*814=630036
773*792=612216
772*803=619916
768*638=489984
766*108=82728
765*671=513315
763*715=545545
762*627=477774
761*473=359953
759*953=723327
755*671=506605
754*924=696696
752*396=297792
749*715=535535
748*927=693396
747*114=85158
744*363=270072
742*858=636636
741*231=171171
739*209=154451
738*121=89298
737*888=654456
735*715=525525
733*902=661166
731*836=611116
728*957=696696
727*137=99599
726*926=672276
722*968=698896
721*715=515515
716*113=80908
715*833=595595
714*308=219912
713*561=399993
712*913=650056
711*129=91719
708*116=82128
707*858=606606
704*909=639936
703*825=579975
702*119=83538
699*825=576675
696*704=489984
695*825=573375
694*418=290092
693*962=666666
691*825=570075
689*924=636636
688*583=401104
685*803=550055
684*127=86868
683*187=127721
682*958=653356
678*957=648846
674*671=452254
671*775=520025
669*122=81618
666*946=630036
664*979=650056
663*126=83538
662*913=604406
661*149=98489
659*209=137731
658*429=282282
657*137=90009
654*671=438834
653*638=416614
652*968=631136
651*117=76167
649*726=471174
647*121=78287
646*946=611116
645*913=588885
643*126=81018
641*825=528825
639*132=84348
638*977=623326
637*968=616616
636*704=447744
635*803=509905
633*825=522225
632*341=215512
631*935=589985
629*726=456654
627*925=579975
622*108=67176
621*149=92529
619*517=320023
618*748=462264
617*157=96869
616*754=464464
615*869=534435
614*979=601106
613*484=296692
612*103=63036
611*462=282282
609*104=63336
608*107=65056
607*108=65556
606*759=459954
605*979=592295
604*147=88788
603*374=225522
602*149=89698
601*231=138831
599*935=560065
598*693=414414
597*167=99699
594*142=84348
593*935=554455
592*792=468864
591*127=75057
589*142=83638
588*429=252252
587*935=548845
586*116=67976
584*142=82928
583*995=580085
582*506=294492
581*169=98189
579*123=71217
578*151=87278
577*649=374473
576*814=468864
574*418=239932
573*671=384483
572*847=484484
568*146=82928
566*121=68486
564*528=297792
563*748=421124
562*149=83738
561*915=513315
559*133=74347
558*484=270072
557*792=441144
556*121=67276
555*979=543345
554*726=402204
553*858=474474
549*935=513315
548*803=440044
547*902=493394
546*869=474474
543*935=507705
542*902=488884
541*462=249942
539*975=525525
538*913=491194
534*157=83838
532*451=239932
531*814=432234
529*836=442244
528*928=489984
527*759=399993
526*116=61016
524*528=276672
519*319=165561
518*858=444444
517*995=514415
516*814=420024
514*124=63736
513*166=85158
512*957=489984
511*572=292292
509*836=425524
508*171=86868
507*105=53235
506*964=487784
503*193=97079
502*164=82328
501*199=99699
499*737=367763
498*171=85158
497*138=68586
496*979=485584
495*121=59895
494*101=49894
493*176=86768
491*115=56465
489*836=408804
488*913=445544
487*616=299992
485*121=58685
484*971=469964
483*858=414414
482*184=88688
481*924=444444
479*182=87178
478*142=67876
477*151=72027
476*572=272272
475*121=57475
474*182=86268
473*888=420024
472*506=238832
471*231=108801
469*182=85358
468*539=252252
467*759=354453
465*121=56265
464*187=86768
463*132=61116
462*962=444444
461*188=86668
459*182=83538
458*968=443344
457*902=412214
455*121=55055
454*182=82628
453*196=88788
452*902=407704
451*914=412214
449*182=81718
448*147=65856
447*363=162261
446*979=436634
444*946=420024
443*968=428824
442*616=272272
441*572=252252
439*638=280082
438*137=60006
437*506=221122
436*627=273372
435*137=59595
434*101=43834
433*213=92229
432*148=63936
431*146=62926
429*966=414414
428*649=277772
426*198=84348
425*135=57375
424*946=401104
423*704=297792
422*616=259952
421*167=70307
419*737=308803
418*978=408804
417*253=105501
416*203=84448
415*129=53535
414*111=45954
413*135=55755
412*561=231132
411*803=330033
409*183=74847
408*539=219912
407*909=369963
406*572=232232
404*693=279972
403*189=76167
402*561=225522
401*166=66566
399*429=171171
398*167=66466
397*473=187781
396*752=297792
395*145=57275
394*121=47674
393*704=276672
392*561=219912
391*682=266662
389*957=372273
388*759=294492
387*979=378873
386*737=284482
385*143=55055
384*126=48384
383*216=82728
382*229=87478
381*341=129921
378*221=83538
377*616=232232
376*792=297792
375*153=57375
374*728=272272
373*101=37673
372*726=270072
371*572=212212
369*539=198891
368*649=238832
366*223=81618
365*163=59495
364*803=292292
363*961=348843
362*173=62626
361*197=71117
359*251=90109
358*226=80908
357*616=219912
356*248=88288
355*169=59995
354*232=82128
353*283=99899
352*846=297792
351*259=90909
349*145=50605
348*236=82128
347*836=290092
346*181=62626
343*273=93639
342*254=86868
341*883=301103
339*957=324423
338*182=61516
337*979=329923
336*196=65856
335*177=59295
334*199=66466
333*704=234432
332*122=40504
331*913=302203
329*858=282282
328*271=88888
327*836=273372
326*627=204402
325*161=52325
323*111=35853
322*213=68586
321*561=180081
319*878=280082
318*814=258852
317*473=149941
316*682=215512
315*177=55755
314*913=286682
313*121=37873
312*259=80808
311*561=174471
309*748=231132
308*974=299992
307*836=256652
306*737=225522
304*214=65056
303*924=279972
302*294=88788
301*561=168861
299*539=161161
298*301=89698
297*317=94149
296*792=234432
295*201=59295
294*858=252252
293*232=67976
292*284=82928
291*319=92829
289*331=95659
288*814=234432
287*836=239932
286*987=282282
285*185=52725
284*297=84348
283*353=99899
282*106=29892
281*339=95259
279*968=270072
278*242=67276
277*726=201102
275*209=57475
274*803=220022
273*924=252252
272*319=86768
271*902=244442
269*371=99799
268*173=46364
267*314=83838
266*902=239932
265*223=59095
264*968=255552
263*343=90209
262*106=27772
261*451=117711
259*858=222222
258*814=210012
257*248=63736
256*189=48384
255*225=57375
254*342=86868
253*944=238832
252*192=48384
251*359=90109
249*342=85158
248*869=215512
247*693=171171
246*363=89298
245*235=57575
244*337=82228
242*941=227722
241*368=88688
239*539=128821
238*924=219912
237*387=91719
236*348=82128
235*251=58985
234*357=83538
233*339=78987
232*374=86768
231*962=222222
229*382=87478
228*381=86868
227*803=182281
226*358=80908
225*255=57375
224*377=84448
223*847=188881
222*946=210012
221*378=83538
219*411=90009
218*411=89598
217*351=76167
216*383=82728
215*257=55255
214*304=65056
213*433=92229
212*212=44944
211*439=92629
209*978=204402
208*406=84448
207*467=96669
206*433=89198
205*271=55555
204*412=84048
203*416=84448
202*247=49894
201*489=98289
199*501=99699
198*451=89298
197*381=75057
196*453=88788
195*273=53235
193*737=142241
192*363=69696
191*458=87478
189*481=90909
188*461=86668
187*963=180081
186*473=87978
185*297=54945
184*482=88688
183*446=81618
182*484=88088
181*519=93939
179*869=155551
178*496=88288
177*557=98589
176*493=86768
175*329=57575
174*472=82128
173*957=165561
171*508=86868
169*581=98189
168*481=80808
167*597=99699
166*513=85158
165*363=59895
164*542=88888
163*627=102201
161*426=68586
159*601=95559
158*546=86268
157*913=143341
156*553=86268
155*363=56265
154*572=88088
153*546=83538
152*529=80408
151*588=88788
149*661=98489
148*546=80808
147*637=93639
146*613=89498
145*411=59595
144*557=80208
143*987=141141
142*599=85058
141*212=29892
139*759=105501
138*631=87078
137*803=110011
136*638=86768
135*431=58185
134*637=85358
133*559=74347
132*639=84348
131*303=39693
129*711=91719
128*378=48384
127*727=92329
126*663=83538
125*463=57875
124*712=88288
123*957=117711
122*674=82228
121*991=119911
119*831=98889
118*761=89798
117*847=99099
116*748=86768
115*491=56465
114*762=86868
113*843=95259
112*754=84448
111*819=90909
109*911=99299
108*781=84348
107*877=93839
106*424=44944
105*557=58485
104*847=88088
103*866=89198
102*824=84048
101*494=49894
程序运行时间:111ms
这是一道数学题,需要找到一个方法来求解。首先,回文数的特点是从中间对称,例如 12321,左边的 123 和右边的 21 对称。因此,我们可以把问题转化为找到两个 n 位整数的乘积,使得它是一个回文数,并且这个回文数是所有可能回文数中最大的。 我们可以先枚举其中一个 n 位整数 a,然后再枚举另一个 n 位整数 b,计算它们的乘积 c = a * b。接下来,判断 c 是否为回文数,如果是,就更新当前找到的最大回文数。最后,将最大回文数对 1337 取余即可。 代码实现如下: ```python def is_palindrome(num): return str(num) == str(num)[::-1] def max_palindrome(n): res = 0 for i in range(10 ** (n - 1), 10 ** n): for j in range(i, 10 ** n): prod = i * j if is_palindrome(prod): res = max(res, prod) return res % 1337 ``` 这个算法的时间复杂度为 O(n^2 * log(c)),其中 c 是 1337。对于较小的 n,这个算法可以接受,但是对于较大的 n,需要优化算法。 优化的思路是,我们可以先找到最大回文数,然后再反推出两个 n 位整数的乘积最大回文数一定是由两个 n 位整数的乘积得到的,因此我们可以从最大回文数开始枚举其中一个 n 位整数,然后通过除法找到另一个 n 位整数,判断它是否符合要求即可。这个算法的时间复杂度为 O(10^n)。 代码实现如下: ```python def max_palindrome(n): max_num = (10 ** n) - 1 min_num = 10 ** (n - 1) max_pal = 0 for i in range(max_num ** 2, (min_num ** 2) - 1, -1): if is_palindrome(i): for j in range(max_num, min_num - 1, -1): if i % j == 0 and len(str(i // j)) == n: return i % 1337 return 0 ``` 注意,这个算法需要先判断最大回文数是否符合要求,如果不符合,就需要继续枚举下一个回文数。同时,由于题目要求返回最大回文数,因此我们可以从大到小枚举回文数,这样可以保证第一个找到的回文数就是最大的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值