$ cat bignum1.cpp
#include <stdio.h>
#include <stdlib.h>
int factorial(int n)
{ int answer=1;
for (int
i=1; i<=n; i+=1)
answer*=i;
return
answer; }
void main(void)
{ for (int x=1; x<20; x+=1)
printf("%3d! = %d\n", x, factorial(x)); }
$ CC bignum1.cpp
$ a.out
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! =
3628800
11! =
39916800
12! =
479001600
13! =
1932053504
14! =
1278945280
15! =
2004310016
16! =
2004189184
17! =
-288522240
18! =
-898433024
19! =
109641728
$ cat bignum2.cpp
#include <stdio.h>
#include <stdlib.h>
const int size=100;
struct bignum
{ int digit[size];
bignum(int
n)
{ for (int
i=0; i<size; i+=1)
{
digit[i]=n%10;
n=n/10;
} }
void print(void)
{ int
firstdigit=0;
for (int
i=size-1; i>=0; i-=1)
if
(digit[i]!=0)
{
firstdigit=i;
break; }
for (int
i=firstdigit; i>=0; i-=1)
printf("%d", digit[i]); }
void
add(bignum b)
{ int
carry=0;
for (int
i=0; i<size; i+=1)
{ int sum
= digit[i] + b.digit[i] + carry;
carry =
sum/10;
sum =
sum - carry*10;
digit[i] = sum; } }
void
multiply_by_int(int n)
{ int
carry=0;
for (int
i=0; i<size; i+=1)
{ int
prod = digit[i] * n + carry;
carry = prod/10;
prod =
prod - carry*10;
digit[i] = prod; } } };
bignum factorial(int n)
{ bignum answer(1);
for (int
i=1; i<=n; i+=1)
answer.multiply_by_int(i);
return
answer; }
void main(void)
{ for (int x=1; x<20; x+=1)
{ printf("%3d!
= ", x);
bignum f
= factorial(x);
f.print();
printf("\n"); } }
$ CC bignum.cpp
$ a.out
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! =
3628800
11! =
39916800
12! =
479001600
13! =
6227020800
14! =
87178291200
15! =
1307674368000
16! =
20922789888000
17! =
355687428096000
18! =
6402373705728000
19! =
121645100408832000
$
$ cat bignum3.cpp
#include <stdio.h>
#include <stdlib.h>
const int size=100;
struct bignum
{ int digit[size];
bignum(int
n);
void
print(void);
void
add(bignum b);
void
multiply_by_int(int n); };
bignum::bignum(int n)
{ for (int
i=0; i<size; i+=1)
{
digit[i]=n%10;
n=n/10;
} }
void bignum::print(void)
{ int firstdigit=0;
for (int
i=size-1; i>=0; i-=1)
if
(digit[i]!=0)
{
firstdigit=i;
break; }
for (int
i=firstdigit; i>=0; i-=1)
printf("%d", digit[i]); }
void bignum::add(bignum b)
{ int
carry=0;
for (int
i=0; i<size; i+=1)
{ int sum
= digit[i] + b.digit[i] + carry;
carry =
sum/10;
sum =
sum - carry*10;
digit[i] = sum; } }
void bignum::multiply_by_int(int n)
{ int
carry=0;
for (int
i=0; i<size; i+=1)
{ int
prod = digit[i] * n + carry;
carry =
prod/10;
prod =
prod - carry*10;
digit[i] = prod; } }
bignum factorial(int n)
{ bignum answer(1);
for (int
i=1; i<=n; i+=1)
answer.multiply_by_int(i);
return
answer; }
void main(void)
{ for (int x=1; x<20; x+=1)
{
printf("%3d! = ", x);
bignum f
= factorial(x);
f.print();
printf("\n"); } }