计算10000的阶乘

xiaoxiao2021-02-28  15

书上的算法,简单改造一下。VS2015下编译通过。

代码如下:

/* 设计一个可容纳N位数的求n!的程序 C语言版 */ #include <stdio.h> #include <stdlib.h> //#pragma warning (disable:4996) void main(void) { __int64 Data[80000];//用64位 80000个元素,验证可以算到10000! int Digit; int i, j, r, k; int N; for (i = 1; i < 80000; i++) Data[i] = 0; Data[0] = 1; Data[1] = 1; Digit = 1; printf("Enter a number what you want to calculus:"); scanf_s("%d", &N); for (i = 1; i < N + 1; i++) { for (j = 1; j < Digit + 1; j++) Data[j] *= i; for (j = 1; j < Digit + 1; j++) { if (Data[j] >= 10) { for (r = 1; r < Digit + 1; r++) { //N*(N-1)!  N和最高位数组元素(Data[Digit])相乘后,积是两位数就加1,三位加2, ....... __int64 tmp = Data[Digit]; for (int ii = 1; tmp /= 10; ii++) Digit += ii; //大于10就进位到高位 Data[r + 1] += Data[r] / 10; //当前位只留下余数 Data[r] = Data[r] % 10; } } } //printf("Digital:- -!=", Digit, i); //for (k = Digit; k > 0; k--) // printf("%d", Data[k]); //printf("\n"); } printf("Digital:- -!=", Digit, N); for (k = Digit; k > 0; k--) printf("%d", Data[k]); printf("\n"); system("pause"); }

转载请注明原文地址: https://www.6miu.com/read-200409.html

最新回复(0)