Problem z silnią w funkcji

0
#include <iostream>
#include <cstdlib>
 
 
 
 
using namespace std;
 
int wynik = 1;
int obliczaniesilni(int x)
{
    for (int i=x; i == 0 ; i--) {
        wynik = wynik *i;

    }
    return wynik;
}
 
int main() {
 
   
    int liczba;
    cout << "Podaj liczbe:";
    cin >> liczba;
 
    cout << obliczaniesilni(liczba);
    return 0;
}

Witam to jest mój kodzik, mam napisać w funkcji silnię iteracyjnie, lecz na czymś się zawiesiłem, chyba moj algorytm nie jest idealny, pomoze ktos?

3

Dlaczego wynik jest zmienną globalną? Ogółem, to poza tą zmienną wynik (i jej jednokrotnym ustawieniem) chyba jest ok, tylko silnia rośnie bardzo szybko i już 13! nie zmieści się w int na typowych architekturach.

3

Silnia szybko rośnie, ergo już dla niewielkiego argumentu przekroczysz zakres typu int.
Może podaj jaki problem rozwiązuje twój kod, bo jest parę trików obchodzących limit zakresu liczb całkowitych.
Można też napisać kod, który pozwala na obliczenia na dowolnie dużych liczbach całkowitych, limitem będzie tylko ilość pamięci.

A ta zmienna globalna psuje wynik, nawet dla małych argumentów. Tego problemu pewnie nie widzisz, bo twój program wywołuję funkcję tylko raz.

3

Pętla z aktualnym warunkiem nie wykona się ani razu, albo raz, ale tylko jeśli użytkownik wprowadzi 0!

0

no wlasnie nie chodzi mi o sam wybór inta, bo wybrałem go po prostu dla wygody w celu sprawdzenia algorytmu
chodzi mi wlasnie ze program się kompiluje i działa, ale wyniki to 1 albo 0 niezaleznie co wpisze, dlatego mysle ze coś z petla jest nie tak i zastanawiam się co.

0

bo pętlę napisałem od końca, czyli wg mojej "logiki" pętla iteruje z wartością początkową x w dół, aż napotka 0

0

tak wiec jak doszlismy do tego w komentarzach, to jest prawidłowa pętla do tego zadania:
for(int i=x;i>0;i--)

do zamkniecia.

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