#include<iostream> #include<cstring> using namespace std; int n; int ans[1000],pre[1000],now[10],c[1000],len_pre,len_now,len_ans,len_c; int main(){ cin>>n; pre[0]=1; ans[0]=1; len_pre=1; for(int i=2;i<=n;i++){ int temp = i,a=0; while(temp!=0){ now[a++]=temp%10; temp/=10; } len_now=a; for(int k=0;k<len_pre;k++){ for(int j=0;j<len_now;j++){ c[j+k]+=now[j]*pre[k]; if(c[j+k]>=10){ c[j+k+1]+=c[j+k]/10; c[j+k]%=10; } } } len_c=len_pre+len_now-1; if(c[len_c])len_c++; for(int j=0;j<len_c;j++){ pre[j]=c[j]; } len_pre=len_c; while(pre[len_pre]==0)len_pre--; for(int j=0;j<max(len_c,len_ans);j++){ ans[j]+=c[j]; if(ans[j]>=10){ ans[j+1]+=ans[j]/10; ans[j]%=10; } } memset(c,0,sizeof(c)); len_ans=max(len_c,len_ans); if(ans[len_ans])len_ans++; } while(ans[len_ans-1]==0)len_ans--; for(int i=len_ans-1;i>=0;i--)cout<<ans[i]; return 0; }
时间: 2024-04-21 20:23:55 浏览: 13
这段代码是一个计算阶乘的程序。它使用了三个数组来进行计算,其中 `pre` 数组用于保存每一步的中间结果,`now` 数组用于保存当前数字的各个位数,`c` 数组用于保存相乘的结果。最后,通过遍历 `ans` 数组将计算得到的阶乘结果输出。
该程序接受一个整数 `n` 作为输入,然后计算 `n!` 的结果。它使用了循环和嵌套循环来进行数字的相乘和进位操作,以得到最终的阶乘结果。输出结果是一个整数,表示 `n!` 的值。
请注意,这段代码没有对输入进行验证,如果输入的 `n` 不符合要求(如负数),可能会导致不正确的输出或程序崩溃。此外,代码中使用了一些全局变量和数组,可能会导致可读性和维护性方面的问题。
相关问题
#include<iostream> #include<cstdio> using namespace std;是什么意思
#include<iostream> #include<cstdio> using namespace std; 是C++中的预处理指令,用于引入头文件和命名空间。
1. #include<iostream> 是引入iostream头文件,其中包含了输入输出流的定义,例如cout和cin等。
2. #include<cstdio> 是引入cstdio头文件,其中包含了C语言标准输入输出函数的定义,例如printf和scanf等。
3. using namespace std; 是使用std命名空间,std是C++标准库的命名空间,其中包含了很多常用的函数和类。
这些预处理指令的作用是为了在程序中能够使用输入输出流和标准库函数,使得程序更加方便和简洁。
#include <iostream> #include<algorithm> #include<cmath> #include <queue> using namespace std;
#include <iostream>:这是C++标准库中的头文件,用于输入输出流操作,包括cin、cout等。
#include<algorithm>:这是C++标准库中的头文件,用于提供各种算法操作,如排序、查找等。
#include<cmath>:这是C++标准库中的头文件,用于提供数学函数操作,如绝对值、平方根等。
#include <queue>:这是C++标准库中的头文件,用于提供队列操作,包括入队、出队等。
using namespace std;:这是C++的命名空间声明,表示使用std命名空间,可以直接使用std中的函数和对象。