Wyciąganie liczby dziesiątek i jedności z liczby

0

Witajcie mam takie zadanko: <url> http://pl.spoj.com/problems/FCTRL3/ </url>

Jak na razie mam taki kod:

#include <iostream>
#include<cstdlib>


using namespace std;

int silnia(int n)
{
	
	if (n == 0) return 1;
	else return n*silnia(n - 1);
	
	
}


int main()
{
	
	
	
	unsigned ilosc_prob;
	
	
	cin >> ilosc_testow;
	cout << endl;
	int numbersTable[30];

	while (ilosc_testow--)
	{
		unsigned x;
		cin >> x;
		cout<<"!x =: "<<silnia(x)<<endl;
	}
	
	cout << "\n";
	system("pause");


}


I jak teraz najlepiej wyjąć tą liczbę dziesiątek, całości jest jakaś funkcja do tego?

@Edit

Zrobiłem to tak, ale nie wiem czy będzie działało, dla każdego 'x'

int dziesiatki = silnia(x) / 10;
		int jednosci = (silnia(x) - (dziesiatki*10));

		cout << dziesiatki << " " << jednosci<<endl;
0
unsigned x=13243205;
cout<<setfill('0')<<setw(2)<<x%100;

Tylko że to nie rozwiążę twojego problemu.
Przeczytaj uważnie zadanie: (0 ≤ n ≤ 1 000 000 000)
Samo n bez problemu zmieści się do unsigned, zaś silnia z 13 już ci się nie zmieści w unsigned
To ci się przyda: http://pl.wikipedia.org/wiki/Arytmetyka_modularna
Ale najlepiej wypisz sobie silni przynajmniej pierwszych 13 liczb i się zastanów.

0
_13th_Dragon napisał(a):

Przeczytaj uważnie zadanie: (0 ≤ n ≤ 1 000 000 000)
Samo n bez problemu zmieści się do unsigned, zaś silnia z 13 już ci się nie zmieści w unsigned
To ci się przyda: http://pl.wikipedia.org/wiki/Arytmetyka_modularna
Ale najlepiej wypisz sobie silni przynajmniej pierwszych 13 liczb i się zastanów.

Dla pierwszych 12 liczb wyniki są dobre tzn. chodzi mi o te dziesiątki i jedności, ale nie wyobrażam sobie jak mam osiągnąć, żeby liczyło !1000000, ale zaraz poczytam to co mi dałeś. A zaś tak jak piszesz od 13 dzieje się nie wiadomo, co:P

0

Patrz na te wyniki:
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 39916800
12 479001600
Zwłaszcza na ostatnie trzy wiersze, dopóki cię nie olśni.

0

Jakaś wskazówka, jakieś działanie na modulo, lub coś? Jeszcze popatrzę na te 3 liczby:P I poczytam.

@Edit

Jak na razie dostrzegłem to, że od pewnej liczby liczba jedności zawsze będzie wynosiła '0'.

Tzn. właściwie od 9 wzwyż liczba dziesiątek i jedności będzie wynosiła '0'.

Ok dzięki za pomoc:)

Zmieniłem kod w funkcji tak:

int wynik = n*silnia(n - 1);

		if (wynik > 100) return wynik % 100;
		else return wynik

Zaraz sprawdzę czy na pewno dobrze:P

I jeszcze

if(n>9) return 0;

, bo program mi się sypał dla dużych liczb:P
Jeszcze raz wielkie dzięki za pomoc:P

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