10.000!

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
//trương trình in kết quả ra file "D:\gaithua.txt"
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include <stdlib.h>
typedef struct {
long a[3962];
int n;
} aaa; //mảng a để lưu các số (long) có giá trị từ 0 đến 999'999'999
char so[10]; //n lưu số phần tử của mảng a
//----------------------------------- nhân A với x.10 mũ 9.Bn
aaa nhan1(aaa A, long x, int Bn) {
aaa C;
int i, n;
double gtdem;
long nho;
n = A.n + Bn;
nho = 0;
for (i = 0; i <= A.n; i++) {
gtdem = nho + (A.a[i] * (double) x);
nho = (long) (gtdem / 1000000000);
C.a[i + Bn] = (long) (gtdem - (nho * 1000000000));
}
if (nho > 0) {
n++;
C.a[n] = nho;
nho = 0;
}
C.n = n;
while (Bn > 0) {
Bn--;
C.a[Bn] = 0;
}
return C;
}
//-----------------------------------------------tính giai thừa của 1 số (<=10'000)
aaa giaithuaX(long x) {
aaa d;
long i = 1;
d.n = 0;
d.a[0] = 1; //gán giá trị cho số lớn d=1
while (x > i) {
i++;
d = nhan1(d, i, 0); //nhân d lần lượt với 1,2,3....x
}
return d;
}
//-------------------------------------- in kết quả ra file (ở đây em đặt s="D:\giaithua.txt")
void outputltxt(aaa A, char* s) //A là số lớn kiểu aaa, s là xâu chứa tên file in ra
{
int i, j;
long d1, d2;
FILE *f;
f = fopen(s, "a+");
fprintf(f, "-------------------------\n");
fprintf(f, "%s! khoang 10 mu 9 x %d\n", so, A.n);
for (i = A.n; i >= 0; i--) //in lần lượt từng phần tử của mảng A.a ra file
{
d1 = A.a[i];
d2 = 10;
j = 8;
while (d1 > d2) {
j--;
d2 = d2 * 10;
}
while (j > 0) {
fprintf(f, "0");
j--;
}
fprintf(f, "%ld", d1);
}
fprintf(f, "\n");
fclose(f);
}
//----------------------------------------
void main() {
aaa A;
int i = 1;
long x; //A là số lớn kiểu aaa
char *s = "D:\giaithua.txt"; //chường trình in kq ra file "D:\giaithua.txt"
while (i != 0) {
clrscr();
printf("nhap x:"); // nhập số x
fflush(stdin);
scanf("%ld", &x);
ltoa(x, so, 10);
A = giaithuaX(x); // A chứa giá trị của x!
printf("\n%d\n", A.n); // in ra số phần tử chứa trong mảng A.a
outputltxt(A, s); // in mảng A.a lần lượt ra file s
printf("\ncontinue?(1/0):");
fflush(stdin);
scanf("%d", &i);
}
}