Program obliczający sumę silni – nie wiem co mam źle

0

Mam do napisania program obliczający sumę silni, czyli 1!+2!+3!+4! + ....
Nie wiem co mam źle, będę wdzięczny za pomoc.

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;
    int wynik=0;
    for(int j=1; j<=n; j++){
    for(int i=1; i=j; i++)
    {
        suma = i*suma;
    }
    wynik = suma+wynik;

    } return wynik;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}
1

i=j przypisanie zamiast porównania. BTW: zakres int bardzo szybko ci się skończy

0

ok poprawiłem ale dalej nie działa tak jak powinien, jeszcze jakieś wskazówki?

0

Nie ustawiasz sumy na 1 dla kolejnych silni

0

Kod po poprawce wygląda tak:

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;
    int wynik=0;
    for(int j=1; j<=n; j++){
    for(int i=1; i=j; i++)
    {
        suma = i*suma;
    }
    wynik = suma+wynik;

    } return wynik;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}

działa poprawnie gdy wprowadzę 1 i 2, dla 3 zwraca 15 a powinien 8

0

Prześledź co się dzieje z wartością suma podczas wykonania.

0

Na samym początku zacząłem od tego kodu

#include <iostream>

using namespace std;

int s(int n)
{
    int suma=1;

    for(int i=1; i<=n; i++)
    {
        suma = i*suma;
    }
    return suma;
}
int main()
{
    int w;
    cin>>w;
    cout<<s(w);

    return 0;
}

liczy silnie dobrze, nie wiem jak prześledzić wartości sumy

0

Zrób eksperyment myślowy i zastanawiaj się jaką wartość ma ta zmienna po każdym kroku programu. Ewentualnie użyj debuggera.

0

Próbowałem używać debuggera ale za każdym razem omija mi moją funkcję(czyli nie pokazuje krok po kroku co się w niej dzieje), jakby debugger działał tylko w funkcji main

1

Nie Potrzebowałbyś debuggera, Gdybyś się sekundę zastanowił nad tą funkcją:)
S1 = 1
S2 = S1 + 1*2
S3 = S2 + 1*2*3
...
SN = S(N - 1) + N!
Co prowadzi do banalnego kodu:

int sum_fact(int n){        
    int f = 1; // f for factorial:)
    int s = 0;
    for(int i = 1; i <= n; i++){
        f *= i;
        s += f;
    }
    return s;   
}

Zreszta, Mógłbyś , równie dobrze, napisać to naiwnie, zakres, nawet 64 bitów, szybko się skończy.

int fact(int n){
    if (n == 0) return 1;
    else
        return n * fact(n - 1);
}
int sum_fact_naive(int n){
    int s = 0;
    for (int i = 1; i <= n; i++)
        s += fact(i);
    return s;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0