57 求N!
问题描述 :
给你一个整数N(0 ≤ N ≤ 10000),你的任务是计算并输出 N!
输入说明 :
输入多行,每行一个N。
输出说明 :
对于每个输入N,在一行中输出N!
行首与行尾为空格,两组输出之间无空行。
输入范例 :
2
1
100
输出范例 :
2
1
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
思想:这题有时间复杂度要求。按位计算,然后累加进位,比如9*9,结果是81,那么先取余得1,放在个位,然后进位/10,得8,累加到十位。
#include <stdio.h> #include <stdlib.h> int main() { int num, i, j, k; while (scanf("%d", &num) != EOF) { int res[10000] = {0}; res[0] = 1; int cur, temp; int len = 1; if (num == 0 || num == 1) { printf("1\n"); } else if (num == 2) { printf("2\n"); } else { int flag; for (i = 2; i <= num; i++) { for (j = 0; j < len; j++) { temp = res[j] * i + flag; res[j] = temp % 10; flag = temp / 10; if (flag != 0 && j == len - 1) { len++; } } } for (i = len - 1; i >= 0; i--) { printf("%d", res[i]); } printf("\n"); } } return 0; }