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 ;
}
Bài liên quan
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
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
Đọ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
ý mình là mình muốn hiểu được vì sao mình sai ấy
y tuong cua minh da neu o tren, vi minh biet moi java nen khong doc duoc code c cua ban
ý tưởng của mình cx gần như tương tự mà bạn :v