Wyświetlanie silnii z dużych liczb

0

Witam. Mam do napisania program liczący silnię z dużych liczb. Termin wysłania to dzisiaj do północy :D Ogólnie to wszystko mi pięknie działa, elegancko silnia jest liczona, jednak mam mały problem. Jest on raczej banalny, ale jakoś nie mogę sobie z nim sam poradzić... Jako, że czasu zostało niewiele piszę do Was z prośbą o pomoc, pewnie jakoś w końcu sam bym do tego doszedł, ale przyznaję, trochę późno się za to zabrałem :/

Poniżej znajduje się cały kod. Problem polega na tym, że silnia wyświetlana jest od razu po wpisaniu liczby, z której ma być policzona silnia. A chodzi o to, żeby najpierw podać wszystkie liczby, a następnie mają zostać wyświetlone po kolei wyniki.
Dla przykładu.
Po wpisaniu tych liczb:

3 - to jest liczba, która określa z ilu liczb chcemy policzyć silnię
7
10
20

Powinno wyświetlić:

5040
3628800
2432902008176640000

Mi jednak wyświetla wyniki między tymi liczbami. Podam 7, to od razu wyświetli się wynik 5040 i dopiero potem mogę podać następną liczbę.

Oto kod:

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace System;
using namespace std;


int main()
{
	int C;

	int k;
	unsigned int cyfry[10000];

	for (int i = 1; i < 10000; i++) cyfry[i] = 0;

	cyfry[0] = 1;

	cin >> C;

	if (C>=1 & C<=100)
	{
		int * n = new int[C];

		for (int i = 0; i < C; i++)
		{
			cin >> n[i];
			if (n[i]<0 || n[i]>1000)
			{
				delete[] n;
				exit(0);
			}

			for (int j = 1; j <= n[i]; j++)
			{
				for (k = 0; k < 10000; k++) cyfry[k] *= j;

				for (k = 0; k < 10000 - 1; k++)
				{
					cyfry[k + 1] += cyfry[k] / 10;
					cyfry[k] %= 10;
				}

			}



			for (k = 10000 - 1; k >= 0 && cyfry[k] == 0; k--);
			if (k < 0)
				puts("0");
			else
				for (; k >= 0; k--)
					putchar('0' + cyfry[k]);



			for (int i = 1; i < 10000; i++) cyfry[i] = 0;
			cyfry[0] = 1;

		}

	
		delete[] n;

	}

	else exit(0);
	

	system("pause");

    return 0;
}
0

Standardowe wejście i wyjście to osobne potoki, przemieszane w interaktywnych programach konsolowych. echo "3\n7\n10\n20"|./program wyświetli je w sposób jakiego oczekujesz. Jeśli koniecznie chcesz wyświetlać wyniki później, to wczytuj wejście do tablicy, a dopiero po zakończeniu wczytywania obliczaj silnię.

Swoją drogą: po co używasz new i delete? Masz dużo wygodniejszy std::vector.

0

Ooo właśnie, dziękuję, że mnie oświeciłeś :D A co do tego new i delete, to póki co raczej będę tego używał, bo do vectora jeszcze nie doszliśmy na zajęciach :/

1
annonymouzinho napisał(a):

Ooo właśnie, dziękuję, że mnie oświeciłeś :D A co do tego new i delete, to póki co raczej będę tego używał, bo do vectora jeszcze nie doszliśmy na zajęciach :/

Rozumiem, że na studiach bardzo nieprzychylnie patrzą na samodzielną naukę?

0
annonymouzinho napisał(a):

Ooo właśnie, dziękuję, że mnie oświeciłeś :D A co do tego new i delete, to póki co raczej będę tego używał, bo do vectora jeszcze nie doszliśmy na zajęciach :/

Weź nawet tak nie żartuj. Na studiach jedziesz tak daleko do przodu jak potrafisz.
No chyba że jesteś w szkole podstawowej a programowanie prowadzi "pani od matematyki". Wtedy rób jak napisałeś.

0

Ok, następnym razem będę już używał tego vectora. Dziękuję za pomoc. Temat można zamknąć, wszystko działa jak powinno :)

1
annonymouzinho napisał(a):

Ooo właśnie, dziękuję, że mnie oświeciłeś :D A co do tego new i delete, to póki co raczej będę tego używał, bo do vectora jeszcze nie doszliśmy na zajęciach :/

@annonymouzinho: Czy dobrze rozumiem -- uczą Cię C++, umiesz już new i delete a nie miałeś vectora??? To jet od d**y strony... Co więcej -- jeśli to nie studia, a szkoła, to jeszcze gorzej... :/

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