1 solutions
-
0
C :
#include<stdio.h> #define MAX 1000 int main(void) { int n; while(scanf("%d",&n) == 1 && n >= 0) { int i,j; int a[MAX]; int p , add; a[1] = 1; p = 1; for(i = 2 ; i <= n ; ++i) { for(j = 1 , add = 0 ; j <= p ; ++j) { a[j] = a[j] * i + add; add = a[j] / 10; a[j] = a[j] % 10; } while(add > 0) { a[j] = add % 10; add = add / 10; ++j; } p = j - 1; } for(i = p ; i >= 2 ; --i) { printf("%d",a[i]); } printf("%d\n",a[i]); } return 0; }
C++ :
#include<stdio.h> #include<string.h> const int MAXN=40000;//如果是10000的阶乘,改为40000就够了 int f[MAXN]; int main() { int i,j,n; while(scanf("%d",&n)!=EOF) { memset(f,0,sizeof(f)); f[0]=1; for(i=2;i<=n;i++) { int c=0; for(j=0;j<MAXN;j++) { int s=f[j]*i+c; f[j]=s%10; c=s/10; } } for(j=MAXN-1;j>=0;j--) if(f[j]) break;//忽略前导0 for(i=j;i>=0;i--) printf("%d",f[i]); printf("\n"); } return 0; }
Pascal :
var i,j,n,w : longint; a : array[1..1000] of integer; procedure fact(k : longint); var x,i : longint; begin x := 0; for i := 1 to w do begin a[i] := a[i]*k+x; x := a[i] div 10; a[i] := a[i] mod 10; end; while x>0 DO begin w := w+1; a[w] := x mod 10; x := x div 10; end; end; begin {assign(input,'ni.in'); reset(input); assign(output,'ni.out'); rewrite(output);} a[1] := 1; w := 1; readln(n); for i := 1 to n do fact(i); for j := w downto 1 do write(a[j]); writeln; { close(input); close(output);} end.
Java :
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); BigInteger s=BigInteger.valueOf(1); for (int i=1;i<=n;i++) { s=s.multiply(BigInteger.valueOf(i)); } System.out.println(s.toString()); } }
- 1
Information
- ID
- 605
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By