Project Euler Problema nr. 8

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
Lady_In_Red
Junior
Junior
Posts: 5
Joined: 10 Jan 2015, 16:49
Judet: Timiş

Project Euler Problema nr. 8

Post by Lady_In_Red » 10 Jan 2015, 17:02

Va salut.

Am gasit o problema pe site-ul project euler si anume : sa se gaseasca cel mai mare produs a 13 cifre consecutive din următorul număr de 1000 de cifre.
Problema este ca nu reusesc sa gasesc un tip de data care sa stocheze numarul respectiv (codul este bun, l-am testat de multe ori).
Am incercat si cu long long, long int, unsigned long dar degeaba.

Asta-i codul :

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char tab[] = "73167176531330624919225119674426574742355349194934\
                  96983520312774506326239578318016984801869478851843\
                  85861560789112949495459501737958331952853208805511\
                  12540698747158523863050715693290963295227443043557\
                  66896648950445244523161731856403098711121722383113\
                  62229893423380308135336276614282806444486645238749\
                  30358907296290491560440772390713810515859307960866\
                  70172427121883998797908792274921901699720888093776\
                  65727333001053367881220235421809751254540594752243\
                  52584907711670556013604839586446706324415722155397\
                  53697817977846174064955149290862569321978468622482\
                  83972241375657056057490261407972968652414535100474\
                  82166370484403199890008895243450658541227588666881\
                  16427171479924442928230863465674813919123162824586\
                  17866458359124566529476545682848912883142607690042\
                  24219022671055626321111109370544217506941658960408\
                  07198403850962455444362981230987879927244284909188\
                  84580156166097919133875499200524063689912560717606\
                  05886116467109405077541002256983155200055935729725\
                  71636269561882670428252483600823257530420752963450";
    unsigned long i, j, max = 0, prod;
    for(i = 0; i < 1000; i++)
    {
        prod = 1;
        for(j = i; j < i+13; j++)
        {
            prod = prod * (tab[j] - '0');
        }
        if(prod > max)
        {
            max = prod;
        }
    }
    printf("\n The thirteen adjacent digits in the 1000-digit number that have \n"
           "\n the greatest product is : %u\n", max);
    return 0;
}
Astept sfaturi.

Va multumesc.



Viorel
Microsoft MVP
Microsoft MVP
Posts: 293
Joined: 13 Jul 2007, 12:26

Re: Project Euler Problema nr. 8

Post by Viorel » 10 Jan 2015, 18:58

Cred că long long pentru max și prod e suficient. Variabilele i și j pot fi int. Dar mai e nevoie de cîteva rectificări.

Stringul nu este bun deoarece include spațiile de la începutul rîndurilor. Încearcă asta:

Code: Select all

char tab[] =
        "73167176531330624919225119674426574742355349194934"
        "96983520312774506326239578318016984801869478851843"
        . . . .
        "71636269561882670428252483600823257530420752963450";
Primul ciclu ar trebui să se execute pînă la i < 1000–13, altfel se vor accesa niște valori eronate.

Pentru afișarea produsului se va folosi „%llu”.

Lady_In_Red
Junior
Junior
Posts: 5
Joined: 10 Jan 2015, 16:49
Judet: Timiş

Re: Project Euler Problema nr. 8

Post by Lady_In_Red » 10 Jan 2015, 19:27

Multumesc frumos Viorel.
Functioneaza.
Daca poti, te rog sa-mi recomanzi un site de unde pot citi despre specificatorii de format.
Multumesc inca o data.

Viorel
Microsoft MVP
Microsoft MVP
Posts: 293
Joined: 13 Jul 2007, 12:26

Re: Project Euler Problema nr. 8

Post by Viorel » 10 Jan 2015, 20:43

Documentația pentru specificatori (în limba engleză) este aici: http://msdn.microsoft.com/en-us/library/56e442dc.aspx.

Dacă se folosește biblioteca standard STL, de obicei e mai simplu:

Code: Select all

#include <iostream>
using namespace std;
. . .
    cout << "The thirteen adjacent digits in the 1000-digit number that have" << endl
         << "the greatest product is: " << max << endl;

Post Reply