Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
173610 | B班-雷宸希 | 高精度阶乘 | C++ | 无测评数据 | 0 | 0 MS | 0 KB | 932 | 2024-08-20 22:05:44 |
#include<bits/stdc++.h> using namespace std; //总体方法介绍:main函数内,算出1!后加入答案数组,再在1!基础上*2,再相加,以此类推 long long a[100000]={0,1,0},len=1,ans[10000000]={0},len2=1000000;//a:每个阶乘 len:阶乘长度 ans:最终答案 len2:答案长度 void jc(int a1){ int g=0;//进位 for(long long i=1;i<=len+1000;i++){//len+1000:以防多位进位,例 g=1023 int s=a1*a[i]+g;//a1是阶乘乘的数 a[i]=s%10; g=s/10;//进位 } for(int i=len+10;i>=len;i--){//时刻计算阶乘长度 if(a[i]!=0){ len=i; } } } void shu_chu(){ for(;;len2--){//建议用while循环,这里用了非定义非判断无限循环for if(ans[len2]!=0){//不等于0退出 break; } } for(int j=len2;j>=1;j--){//倒序输出 cout<<ans[j]; } } int main() { int a; cin>>a; jc(a);//阶乘 shu_chu(); //输出 return 0; }