//trương trình in kết quả ra file "D:\gaithua.txt" #include #include #include #include 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); } }