[NOIP1998]阶乘之和
1 #include <iostream> 2 using namespace std; 3 int n,upnum,flag; 4 int ans[500]={0},a[500]={0}; //位数可以不用很大 5 inline void ch(int b) //高精度乘法 6 { 7 for(int i = 400;i >= 1;i--) //采用倒着处理的方式 个位数数组下标最大 8 { 9 a[i] = a[i] * b + upnum; //注意进位方式 先乘再加进位数 10 upnum = a[i] / 10; 11 a[i] %= 10; 12 } 13 } 14 inline void qh() //高精度加法 15 { 16 for(int i = 400;i >= 1;i--) 17 { 18 ans[i] = ans[i] + upnum + a[i]; 19 upnum = ans[i] / 10; 20 ans[i] %= 10; 21 } 22 } 23 int main() 24 { 25 cin >> n; 26 a[400] = 1; 27 for(int i = 1;i <= n;i++) 28 { 29 ch(i); 30 qh(); 31 } 32 for(int i = 1;i <= 400;i++) 33 { 34 if(ans[i] != 0) 35 { 36 for(int j = i;j <= 400;j++) printf("%d",ans[j]); //去除正序输出前面的多余0 37 return 0; 38 } 39 } 40 }
浙公网安备 33010602011771号