Kod: Zaznacz cały
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n, w=1;
scanf("%d",&n);
if (n==0) printf("%d
",w);
else
{
while (n>0)
{
w=w*n;
n=n-1;
}
printf("%d
",w);
}
return 0;
}
Kod: Zaznacz cały
#include<iostream>
using namespace std;
// dwie bardzo proste funkcje
inline int min(int a, int b) { if (a<b) return a; return b; }
inline int max(int a, int b) { if (a>b) return a; return b; }
// funkcja odwraca kolejność w tablicy
void reverse( int *tab, int n )
{
int i=0, j=n-1;
while (i<j)
{
swap( tab[i], tab[j] );
i++; j--;
}
}
// Funkcja dodaje dwie liczby, których cyfry zapamiętane są w tablicach
void add( int *A, int n , int *B, int m, // dane : dwie tablice z cyframi (długie liczby)
int *C, int &d ) // wynik: tablica z cyframi, liczba d
{ // zależność : C = A+B , d = rozmiar tablicy C
// odwracamy liczby dla uproszczenia algorytmu
reverse(A, n); reverse(B, m);
// algorytm dodawania : złożoność O( n+m )
int r = min(n,m);
int carry = 0;
for(int i=0; i<r; i++)
{
int q = A[i] + B[i] + carry; // q<20
C[i] = q%10;
carry = q/10; // carry<2
}
for (int i=r; i<n; i++)
{
int q = A[i] + carry; // B[i]==0
C[i] = q%10;
carry = q/10;
}
for (int i=r; i<m; i++)
{
int q = B[i] + carry; // A[i]==0
C[i] = q%10;
carry = q/10;
}
d = max(n,m);
if (carry>0)
{
d++;
C[ d-1 ] = carry;
}
// odwracamy wynik
reverse(C, d);
// odwracamy liczby A i B
reverse(A, n); reverse(B, m);
}
Kod: Zaznacz cały
#include<iostream>
using namespace std;
// funkcja odwraca kolejność w tablicy
void reverse( int *tab, int n )
{
int i=0, j=n-1;
while (i<j)
{
swap( tab[i], tab[j] );
i++; j--;
}
}
// Funkcja mnoży dwie liczby, których cyfry zapamiętane są w tablicach
void mult( int *A, int n , int *B, int m, // dane : dwie tablice z cyframi (długie liczby)
int *C, int &d ) // wynik: tablica z cyframi
{ // zależność : C = A*B , d = rozmiar tablicy C
// odwracamy liczby dla uproszczenia algorytmu
reverse(A, n); reverse(B, m);
// zerowanie wyniku
for (int i=0; i<n+m; i++) C[i] = 0;
// algorytm mnożenia : złożoność O( n*m )
for(int i=0; i<n; i++)
{
int carry = 0;
for (int j=0; j<m; j++)
{
int q = A[i]*B[j] + carry + C[i+j]; // q<100
C[i+j] = q%10;
carry = q/10; // carry<10
}
if (carry>0) C[i+m] = carry;
}
// usuwanie wiodących zer
d = n+m; // długość liczby C
while (d>1 && C[d-1]==0) d--;
// odwracamy wynik
reverse(C, d);
// odwracamy liczby A i B
reverse(A, n); reverse(B, m);
}