Zmagam się z dość poważnym problemem w moim programie. Piszę w C++ kalkulator dla dużych liczb. Chciałem teraz napisać funkcję dla liczenia SIlnii. Można powiedzieć, że udało mi się to zrealizować, jednak chciałem lekko zrefaktoryzować mój kod.
string Silnia(string a)
{
Filtruj(a); // Po prostu pozbywam się zer na początku a = 0010, a = 10;
// ZMIENNE
string wynik = a;
if (wynik == "0") // 0! = 1
return "1";
// SILNIA
while (a > "2") // ZLY WARUNEK
{
a = Odejmowanie(a, "1"); // Moja funkcja do odejmowania
wynik = Mnozenie(wynik, a); // Moja funkcja do mnożenia
}
// WYPISUJEMY WYNIK
return wynik;
}
Chciałem teraz zrobić tak, aby dla wartosc
0! = 1
1! = 1
2! = 2
3! = 6 <-- dopiero tutaj wchodzę do pętli i wykonuje mnożenie.
Chcę po prostu zaoszczędzić trochę na czasie jak i na ilości operacji, aby nie wykonywać tych trywialnych obliczeń, które i tak nic nie zmienią. Chyba dobrze?
Problem stanowi ta linijka while (a > "2"), nie wiem dlaczego nie chce to chodzić tak jak sobie założyłem. Co ciekawe dla while (a > "1") jest już wszystko w porządku. Mogę co prawda to obejść warunkiem while (a != "2") ale wtedy muszę specjalnie obsłużyć wyjątek dla 1! = 1, bez tego wynik 1! = 0;
Co wykonuje źle? CodeBlox mi nie pomaga, debbuger nie działa na stringach, mówiąc, że są niezoptymalizowane.