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