因为0<=N<=10000,所以可以让存在数组里的每一位直接乘i;
我也不会,借鉴了大神的代码。
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; int ta[40001]; int main() { int n; int t,k; while(scanf("%d",&n)!=EOF) { memset(ta,0,sizeof(ta)); ta[0]=1; for(int i=2;i<=n;i++) { k=0; for(int j=0;j<40000;j++) { t=ta[j]*i+k;//算法的关键,估计再出个这种题也不会 ta[j]=t%10; k=t/10; } } int flag=0; for(int i=40000;i>=0;i--) { if(flag||ta[i]) { flag=1; printf("%d",ta[i]); } } printf(" "); } return 0; }
只能 t=ta[j]*i+k;
不能t=ta[j]*i;
k=ta[j]%10;
ta[j+1]=ta[j+1]+k;
这样就不是ta[i+1]*i了,结果就被变大了