Problem 8 : Largest product in a series

Problem 8


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位正整數中,連續4個數字的最大乘積是 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

找出這個1000位正整數中乘積最大的連續13個數字。它們的乘積是多少?


題目解答

    樸素解法:暴力枚舉(遍歷所有數字然後向後找12位,然後尋找最大值即可)
    優化算法:滑動窗口法,我們不必要每次都將其作爲起點向後尋找12位,我們只要以上一個過程得到的結果乘以後一位數,然後再除以當前位置前第13位即可,我們無非需要考慮序列包含0的情況,單獨用一個計數器記錄0的個數即可。
        大體思想如圖所示:

     

題目代

    

#include <stdio.h>
#include <inttypes.h>
#include "main.h"
int32_t main(){
    int32_t zero = 0;
    int64_t ans = -0xffff;
    int64_t p = 1;
    for(int32_t i=0;i[num];++i){
    if(i[num]=='0'){
            ++zero;
        }else{
            p *= (i[num]-'0');
        }        
    if(i >= 13){
            if((i-13)[num]=='0'){
                --zero;
            }else{
                p/= ((i-13)[num]-'0');
            }
        if(zero == 0 && ans < p){
                ans = p;
            }
        }
    }
    printf("%" PRId64 "\n",ans);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章