#include
#include
void main(void)
{ int i;char t[300];double d, f;
if argc()
d = 0;
for (f=i=1; i<10000; i++)
printf(\"%4d%11.4f%14.7e\\n\", i, d+=log10(i), i<171?f*=i:f);
}
if (n<2) n = 2;
i = 1;i++;
while (i)
{printf(\"Enter a number to factorial to: \");
scanf(\"%s\",t);
if (isdigit(t[0]))
{if ((n=atoi(t)) != atof(t))
printf(\"Please input an integer!\\n\");
else if (n<0)
printf(\"Negative integer is wrong!\\n\");
else i=0;
}
else printf(\"Non-digit is wrong!\\n\");
}
2006-07-30 19:20:10 · 1 個解答 · 發問者 基峰 2 in 電腦與網際網路 ➔ 程式設計
#include
#include
#include
#include
#define D 10000 // 每四位用一個整數
#define M 8914 // 10000! 是 8914 * 4 位數
typedef struct { short d; unsigned long n[M];} LNG;
void printLNG(LNG *A)
{ int i;
printf("%4u", A->n[A->d]); // 印出第一位
for (i=A->d-1; i>=0; i--)
printf(",%04u", A->n[i]); // 印出其它位
}
void times(LNG *A, unsigned n)
{ int i, c;
for (c=i=0; i<=A->d; i++) // 開始迴圈 & 進位為 0
{ A->n[i] = A->n[i] * n + c; // 算這位的乘法,並加上前一位的進位值
if (A->n[i] >= D) // 溢位了?
{ c = A->n[i] / D; //要進位 c
A->n[i] %= D; // 這位剩下
}
else c = 0; // 沒溢位,所以進位為 0
}
if (c) A->d++, A->n[i] = c; // 最高位有進位?加一位並儲存數值
}
int main(int argc, char **argv)
{ int i;
unsigned n;
LNG A;
char t[300]; // 299 位輸入暫存
if (argc == 2) n = atoi(argv[1]); 命令後有數字?設定為 n
else
{ i = 1; // 需要輸
while (i) // 需要輸嗎?
{ printf("Enter a number less than 10001 to factorial to: ");
scanf("%s", t);
if ( isdigit(t[0]) ) // 第一位是數字?
{ if ((n=atoi(t)) != atof(t)) // 不是整數?
printf("Please input an integer!\n");
else if (n<0) // 是負數?
printf("Negative integer is wrong!\n");
else if (n > 10000)
printf("Wrong input, number can not larger than 10000.\n");
else i=0; // 終於對了。
}
else printf("Non-digit is wrong!\n"); // 輸入的內容不是數字開始
}
}
for (i=1; i
printf("\n%4d! = ", 0); printLNG(&A); // 印出 0! 的答案 (1)
for (i=1; i<=n; i++) // 從 1! 算到 n!
{ times(&A, i); // 算第 i 個乘法
printf("\n%4d! = ", i); printLNG(&A); // 印出第 i! 的答案
}
return 0;
}
======
那個 for (f=i=1; i<100...)
printf("%4d%...", i , d+=log10(i)...)
那是另一個單獨的程式,在算 N! 是幾位數。
2006-07-31 02:12:29 · answer #1 · answered by ? 7 · 0⤊ 0⤋