Silnia/kod

Z Wikiźródeł, repozytorium wolnych materiałów źródłowych


Silnia Silnia • Kod źródłowy
Silnia Silnia
Kod źródłowy

Spis treści

[edytuj] C

Poniższy krótki program napisany w języku C oblicza dokładnie wartości silni. Została przy jego pomocy wygenerowana tablica umieszczona niżej. Zwyczajne mnożenie liczb typu int nie mogło być zastosowane, gdyż wartości silni wielokrotnie przekraczają górne ograniczenie tego typu. Zwyczajne mnożenie liczb rzeczywistych nie mogło być zastosowane, gdyż wprowadzałoby niedokładność.

#include <stdio.h>
 
int main(void)
{
    int cyfry[1000] = { 1 };
    int n, p, w, liczba;
    printf("Podaj maksymalna podstawe silni\n");
    scanf("%d", &liczba);
    printf("<table border=\"1\"><tr><th align=\"right\">n</th>"
           "<th align=\"left\">n!</th></tr>\n");
    for (n=1; n<=liczba; n++) {
        printf("<tr><td align=\"right\">%2d</td><td>",n-1);
 
        for (p=999; !cyfry[p]; p--)
            /* NIC */;
        while (p>=0)
            printf("%c",'0'+cyfry[p--]);
 
        printf("</td></tr>\n");
 
        for (w=0, p=0; p<1000; p++) {
            w += n*cyfry[p];
            cyfry[p] = w % 10;
            w /= 10;
        }
    }
    printf("</table>");
    return 0;
}

Po uruchomieniu program generuje tablicę zawierającą kolejne wartości silni.

[edytuj] Pascal

program silnia;
var
  a:integer;
  i:byte;
  n:longint;
 
begin
  repeat
    writeln('Podaj podstawe silni');
    readln(a);
  until (a >= 0);
 
  n:=1;
  for i:=1 to a do n:=n*i;
  writeln('Wynik to:',n);
  readln;
end.

[edytuj] Common Lisp / Emacs Lisp

Rekurencyjnie:

(defun silnia(n)
  (if (= n 1)
    1
    (* n (silnia (1- n)))))

[edytuj] Python

Rekurencyjnie:

def silnia(n):
    if n>1:
        return n * silnia(n-1)
    else:
        return 1

Iteracyjnie:

def silnia(n):  
    if n<2: 
        return 1
    else:
        for i in range(2,n):
            n*=i
        return n

[edytuj] Program w Javie

import java.math.*;
 
public class Silnia {
 
    public static void main (String[] arg) {
	BigInteger silnia = new BigInteger("1");
	BigInteger n = new BigInteger(arg[0]); //Konwersja podanego argumentu do liczby całkowitej
 
	while (n.compareTo(BigInteger.ONE)>0) {
	    silnia = silnia.multiply(n);
	    n = n.subtract(BigInteger.ONE);
	}
 
	System.out.print(silnia.toString());
    }
 
}

Aby policzyć wartość na przykład 1000! piszemy w linii poleceń: java Silnia 1000