Bu tekrarlanabilir, ancak bana güvenin Tatmin edici bir cevap bulamıyorum. Birisi lütfen bana bu sorunun neden yanlış yanıtını alıyorum söyle: https://projecteuler.net/problem=8. Brüt zorla kullandım. Kodum küçük sayılar için doğru cevap veriyor. Ancak 13 haneli yanlış cevap veriyor. Kod:Proje euler üzerinde yanlış cevap alma # 8
#include <iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string str = "73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
int len = str.size();
double maxi = 0, product = 1;
for(int i = 0; i < len - 13; i ++){
product = (str[i] - '0') * (str[i+1] - '0') * (str[i+2] - '0') * (str[i+3] - '0') * (str[i+4] - '0') * (str[i+5] - '0')* (str[i+6] - '0') * (str[i+7] - '0') * (str[i+8] - '0') * (str[i+9] - '0') * (str[i+10] - '0') * (str[i+11] - '0') * (str[i+12] - '0');
if(maxi < product){
maxi = product;
}
}
cout << maxi;
cin.get();
return 0;
}
Verdikleri örnek için. Ben aynı doğru cevabı 5832. Kod olsun, 4-ardışık basamak ürünüdür:
#include <iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string str = "73167176531330624919225119674426574742355349194934969835203127745063262395783180169848018694788518438586156078911294949545950173795833195285320880551112540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
int len = str.size();
double maxi = 0, product = 1;
for(int i = 0; i < len - 13; i ++){
product = (str[i] - '0') * (str[i+1] - '0') * (str[i+2] - '0') * (str[i+3] - '0'); //* (str[i+4] - '0') * (str[i+5] - '0')* (str[i+6] - '0') * (str[i+7] - '0') * (str[i+8] - '0') * (str[i+9] - '0') * (str[i+10] - '0') * (str[i+11] - '0') * (str[i+12] - '0');
if(maxi < product){
maxi = product;
}
}
cout << maxi;
cin.get();
return 0;
}
Neden "ürün" hesaplaması için bir döngü kullanmıyorsunuz? –
Hangi noktada beklenen sonuçlara tam olarak ulaşmıyorsunuz? Bir ikili değerin kaç tane doğru basamak gösterebileceğini biliyor musunuz? –
Lütfen sorun bildirimini buraya da yazınız. –