(C语言)高精度阶乘

时间:2022-01-01 03:37:06

题目描述

启明星软件组组长听说我们会乘法之后,立马让我们帮他算一下阶乘(怎么有这么坏的组长)。

此题也很简单只需要算一下不大于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;