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

Program obliczający sumę silni – nie wiem co mam źle
Tomek Nadrowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
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.

Kopiuj
#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;
}

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

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

Tomek Nadrowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Nie ustawiasz sumy na 1 dla kolejnych silni

Tomek Nadrowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Kod po poprawce wygląda tak:

Kopiuj
#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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

Tomek Nadrowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

Kopiuj
#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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

Tomek Nadrowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
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

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5027
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:

Kopiuj
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.

Kopiuj
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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.