题解 | N的阶乘
N的阶乘
https://www.nowcoder.com/practice/f54d8e6de61e4efb8cce3eebfd0e0daa
#include <stdio.h> #include <stdlib.h> typedef struct{ int s[10000]; int size; }BigNum; void multify(BigNum*bn,int x); void factorial(BigNum*bn,int x); void print(BigNum*bn); int main() { int n; while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to BigNum*bn=(BigNum*)malloc(sizeof(BigNum)); bn->s[0]=1;bn->size=1; factorial(bn, n); print(bn); } return 0; } void multify(BigNum*bn,int x){ int carry=0; for(int i=0;i<bn->size;i++){ int temp=bn->s[i]*x+carry; bn->s[i]=temp%10; carry=temp/10; } while(carry){ bn->s[bn->size++]=carry%10; carry/=10; } } void factorial(BigNum*bn,int x){ for(int i=2;i<=x;i++)multify(bn, i); } void print(BigNum*bn){ for(int i=bn->size-1;i>=0;i--)printf("%d",bn->s[i]); printf("\n"); }