niithub

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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個數字,通過運算可得,最大的連續的四位數的乘機為5832,求出最大的連續的13位數的乘機?

 

=============================

第一次code:

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 public class Main
 5 {
 6     public static void main(String[] args)   
 7     {
 8         System.out.println(num(run()));
 9     }
10     /*
11     *  將1000個數放到一個字符串
12     *  將字符串轉換成字符串數組
13     *  計算每連續的13位數的乘機,並放置在Arraylist數組中
14     *
15     *  注意:乘機的類型為long,如果為int的話,數據結果會超出,導致計算結果出錯
16     */
17     public static List run()
18     {
19         String a="73167176531330624919225119674426574742355349194934"
20                 +"96983520312774506326239578318016984801869478851843"
21                 +"85861560789112949495459501737958331952853208805511"
22                 +"12540698747158523863050715693290963295227443043557"
23                 +"66896648950445244523161731856403098711121722383113"
24                 +"62229893423380308135336276614282806444486645238749"
25                 +"30358907296290491560440772390713810515859307960866"
26                 +"70172427121883998797908792274921901699720888093776"
27                 +"65727333001053367881220235421809751254540594752243"
28                 +"52584907711670556013604839586446706324415722155397"
29                 +"53697817977846174064955149290862569321978468622482"
30                 +"83972241375657056057490261407972968652414535100474"
31                 +"82166370484403199890008895243450658541227588666881"
32                 +"16427171479924442928230863465674813919123162824586"
33                 +"17866458359124566529476545682848912883142607690042"
34                 +"24219022671055626321111109370544217506941658960408"
35                 +"07198403850962455444362981230987879927244284909188"
36                 +"84580156166097919133875499200524063689912560717606"
37                 +"05886116467109405077541002256983155200055935729725"
38                 +"71636269561882670428252483600823257530420752963450";
39         char [] b = a.toCharArray();
40         List<Long>list = new ArrayList<Long>();
41         for(int i=0;i<b.length-13;i++)
42         {
43             list.add(Long.valueOf(String.valueOf(b[i]))*Long.valueOf(String.valueOf(b[i+1]))
44                     *Long.valueOf(String.valueOf(b[i+2]))*Long.valueOf(String.valueOf(b[i+3]))
45                     *Long.valueOf(String.valueOf(b[i+4]))*Long.valueOf(String.valueOf(b[i+5]))
46                     *Long.valueOf(String.valueOf(b[i+6]))*Long.valueOf(String.valueOf(b[i+7]))
47                     *Long.valueOf(String.valueOf(b[i+8]))*Long.valueOf(String.valueOf(b[i+9]))
48                     *Long.valueOf(String.valueOf(b[i+10]))*Long.valueOf(String.valueOf(b[i+11]))
49                     *Long.valueOf(String.valueOf(b[i+12])));
50         }
51         return list;
52     }
53     /*
54     *  遍歷ArrayList數組
55     *  比較輸出最大值
56     */
57     public static long num(List list)
58     {
59         long max=(Long)list.get(0);
60         for(int i=0;i<list.size();i++)
61         {
62             if(max < (Long)list.get(i))
63             {
64                 max = (Long)list.get(i);
65             }
66         }
67         return max;
68     }
69 }

Answer : 23514624000

時間效率: 5 毫秒。

posted on 2016-08-26 11:00  niithub  阅读(244)  评论(0编辑  收藏  举报