本题要求实现打印非负整数阶乘,其中N
是用户传入的参数,其值不超过1000。若是N
是非负整数,则该函数必须在一行中打印出N
!的值,不然打印“Invalid input”。编程
每一个输入包含一个测试用例,第1行输入N。数组
在一行中输出阶乘结果或“Invalid input”函数
15测试
1307674368000spa
#include <stdio.h> /** * 基础编程题目集-6-10 阶乘计算升级版 */ void printFactorial ( const int N ); int main(int argc, char *argv) { int N; scanf("%d", &N); printFactorial(N); return 0; } void printFactorial ( const int N ) { // 存放结果积 int result[2600]; result[0] = 1; // 结果积长度,初始为1 int index = 1; // 结果积的定位下标 int resultIndex; if (N < 0) { printf("Invalid input"); } else if (0 == N) { printf("%d", 1); } else { for (int i = 1; i <= N; i++) { // 余数 int remainder = 0; for (resultIndex = 0; resultIndex < index; resultIndex++) { remainder += result[resultIndex] * i; if (remainder >= 10) { result[resultIndex] = remainder % 10; remainder /= 10; } else { result[resultIndex] = remainder; remainder = 0; } } /** * 判断最后一次乘法(最高位)的结果是否产生余数 */ if(remainder != 0) { result[resultIndex] = remainder; } else { resultIndex -= 1; } index = resultIndex + 1; } /** * 打印result数组即乘积结果 */ for(int i = resultIndex; i >-1 ; i--) { printf("%d", result[i]); } } }