题目描述
启明星软件组组长听说我们会乘法之后,立马让我们帮他算一下阶乘(怎么有这么坏的组长)。
此题也很简单只需要算一下不大于100的数n的阶乘就好了,看我多好数据一下子少了10倍哦!
输入
输入有多组数据。
当读到文件结尾时输入结束
对于每组测试数据,在一行中给出一非负整数n(n小于等于100)。
输入保证数据没有前导0;
当读到文件结尾时输入结束
输出
对于每组输入,在一行中输出非负整数n阶乘的结果。
样例输入
3
5
10
样例输出
6
120
3628800
(高精度阶乘是我认为相对于其他高精度来说是最简单的,因为输入的是一个数了,不是一个数组,所以不用倒置,不用转换类型,只不过是将小于等于n的每一个数与存结果的数组相乘,就是这个数与数组中的每一位相乘,然后相乘进位,最后还是要倒序输出这个数组。期间提交上去一直wrong answer,最后发现是本人的初中数学没有学好,零的阶乘为一,而我还一直傻傻认为零的阶乘为零,然后一直改下面的代码我相信我今生都会记得零的阶乘为一了)
#include<stdio.h>
int main() {int n;
while(scanf("%d",&n)!=EOF) {
if (n == 0)
printf("1\n");
else {
int a[1000]={0};
int c,s;
int i,j;
a[0] = 1;
for (i = 1;i <= n; i++) {
c = 0;
for (j = 0;j < 1000; j++) {
s = a[j]*i+c;
a[j] = s % 10;
c = s / 10;
}
}
j = 999;
while (j) {
if (a[j])
break;
j--;
}
for (i = j; i >= 0; i--)
printf("%d",a[i]);
printf("\n");
}
}
return 0;
}