N的阶乘 -- (九度OJ 大整数乘法)
前言
今天下午在九度做题,又遇到了大整数乘法的问题,求n的阶乘。当n很大时,求得的结果肯定超出了unsigned long int所能表示的范围,因此需要用整型数组去模拟两个数的乘法。
具体方法写在实现代码中了
题目
题目描述: 输入一个正整数N,输出N的阶乘。 输入: 正整数N(0<=N<=1000) 输出: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入: 4 5 15 样例输出: 24 120 1307674368000
AC代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 3000 //存储每次阶乘运算的结果 int str[MAX]; void calculateFactorial(int n); int main() { int n; while (scanf("%d", &n) != EOF) { if(n == 0) { printf("1\n"); } else { calculateFactorial(n); } } return 0; } void calculateFactorial(int n) { int i, j, temp, c, len; memset(str, 0, sizeof(str)); str[1] = 1; for (i = 2, len = 1; i <= n; i ++) { //循环与2,3,..n相乘 for (j = 1, c = 0; j <= len; j ++) { //str数组代表一个数,模拟与i相乘 temp = str[j] * i + c; str[j] = temp % 10; c = temp / 10; } while(c > 0) { str[j ++] = c % 10; c /= 10; } len = j - 1; } for (i = len; i >= 1; i --) { printf("%d", str[i]); } printf("\n"); } /************************************************************** Problem: 1076 User: wangzhengyi Language: C Result: Accepted Time:2150 ms Memory:916 kb ****************************************************************/