mnożenie ciągu kolejnych po sobie liczb

0

Witam. Mam kod programu, ale wynik wychodzi nie taki jaki powinien być. Wzór powinien być dobry liczba=liczban, z czego "liczba" jest na początku zadeklarowana jako 1, a "n" jest liczba zadeklarowana przez użytkownika. Używam pętli for. Przy każdym przejściu pętli n jest zwiększane o 1 za pomocą modyfikatora w deklaracji pętli. Warunkiem zakończenia mnożenia przez siebie liczb jest sytuacja kiedy n<=m. m to druga liczba którą podaje użytkownik, większa od n. Czyli np. n=6 i m=15 powinno działać tak: 6789101112131415=10897286400 a wynik wyświetla mi wynik 2307351808.

Podam również kod:

using namespace std;
int main(){
	unsigned int n, m, liczba=1;
cout<<"Podaj liczbe n: ";
cin>>n;
cout<<"Podaj liczbe m: ";
cin>>m;
for(n; n<=m; n++){
	liczba=liczba*n;
}
cout<<liczba;
	getch();
	return 0;
}
0

Za duża liczba, daj unsigned long

0

Dalej zły wynik

0

A jaki jest zakres danych? Bo nawet long long przechowa nie więcej niż 21! Jak zakresy są większe to musisz zaimplementować własne mnożenie pisemne, albo użyć jakiejś biblioteki do dużych liczb.

0

Dalej ten sam wynik, czy jakiś inny?

0

Dobra. Zakres long long int pasuje.
Źle porównałem poprawny wynik z zakresem unsigned long int

0

A. I czy jest możliwość sprawdzenia jaki zakres posiada konkretny typ zmiennej na swoim kompie/kompilatorze? Bo podobno u każdego zakresy typów mogą się różnić.

0
adrian.widzew napisał(a):

A. I czy jest możliwość sprawdzenia jaki zakres posiada konkretny typ zmiennej na swoim kompie/kompilatorze? Bo podobno u każdego zakresy typów mogą się różnić.

Owszem, jest. http://en.cppreference.com/w/cpp/types/numeric_limits

Na dole jest nawet przykład.

0

Tak. Tylko nie ma kodu do funkcji lowest() i max()

0

Są zaimplementowane w klasie numeric_limits w bibliotece limits. Tylko je wywołaj.

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