30/09/2018, 20:41

Tìm tích lớn nhất của 13 số liền nhau trong một số có 1000 chữ số

Mình đã viết một chương trình nhưng kết quả ra lại là sai, mong mọi người giúp đỡ

#include <iostream>
using namespace std;
int main()
{
    unsigned long int g=1;
    unsigned long int gm=1;
    int counts=0;
    char raw[]="7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
    int* ra = new int [1000];
    for (int n=0;n<1000;n++)
        {
            ra[n]=raw[n]-'0';
            counts++;
            if (ra[n]==0 ) {counts=0;g=1;}
            else if(counts==14)
            {
                counts=13;
                g=(g/ra[n-13])*ra[n];
                if (g>gm) {gm=g;}
            }
            else if (counts<14) g*=ra[n];
        }
    cout << gm ;
}
nguyen huy hoang viết 22:50 ngày 30/09/2018

bạn xét từ 13 số đầu tiên, tính tích của nó, khi đó tích của 13 số tiếp theo( tứ số thứ 2 đến số 15) sẽ = giá trị trước nhân với (số thứ16/ số thứ 1), nếu (số 16/ số 1 )> 1 gì lấy giá trị mới làm max tạm thời, ở cần cần 1 biến max để luu giá trị max tạm thời, cứ xét như thế, đưa vào vòng lặp for và thêm if esle là ez, xin 20k nhé :V

Người bí ẩn viết 22:50 ngày 30/09/2018

Sửa lại topic xóa từ “Có hậu tạ :D” đi nhé. Trên forum là giúp đỡ học hỏi nhau, không ai có quyền được nhận vật phẩm từ người khác

Gió viết 22:53 ngày 30/09/2018

Đọc nhầm đề
nhân 2 số có 1000 chữ số thì có thể nhân theo cách tiểu học, hoặc dùng thuật toán karatsuba mình có 1 mẫu code ở đây bạn có thể tham khảo https://github.com/boconganh/algorithm/blob/master/c/bigint-karatsuba.c

Trần Sơn Tùng viết 22:49 ngày 30/09/2018

ý mình là mình muốn hiểu được vì sao mình sai ấy

nguyen huy hoang viết 22:42 ngày 30/09/2018

y tuong cua minh da neu o tren, vi minh biet moi java nen khong doc duoc code c cua ban

Trần Sơn Tùng viết 22:55 ngày 30/09/2018

ý tưởng của mình cx gần như tương tự mà bạn :v

Bài liên quan
0