Dihuan @ 2023-10-25 09:02:44
大一刚开学新生求助,如有什么错误和不妥,请各位大佬指正
#include <stdio.h>
#include <string.h>
//main函数的参数↓↓↓
int n;//阶乘的上限
char length[9999];//最终结果的长度
//高精度加法函数的变量↓↓↓
char arr1[9999],arr2[9999];//两个高精度加数
int jiashu1[9999],jiashu2[9999],he[9999]={'0'},he2[9999]={'0'};//两个高精度加数、高精度和的每个数字
int k_jiafa=0;//加法进位的数
int length_jiashu; //两个高精度加数中较长的长度
int flag;//判断 和 的数组的首位是否为0
//高精度乘法函数的变量↓↓↓
char arr[9999]={'1'};//高精度乘数
int chengshu[9999]={0};//乘数的每个数字
int ji[9999]; //积的每一个数字
int k_chengfa=0;//乘法进位的数
int length_chengshu;//高精度乘数的长度
void gaojingdu_jiafa(char canshu[9999])
{
sprintf(arr1,"%d",he2);
strcpy(arr2,canshu);
if(strlen(arr1)>=strlen(arr2))
{
length_jiashu=strlen(arr1);
}else
{
length_jiashu+strlen(arr2);
}
for(int i=0;i<strlen(arr1);i++)
{
jiashu1[i]=arr1[strlen(arr1)-1-i]-'0';
}
for(int i=0;i<strlen(arr2);i++)
{
jiashu2[i]=arr2[strlen(arr2)-1-i]-'0';
}
for(int i=0;i<=length_jiashu;i++)
{
he[i]=jiashu1[i]+jiashu2[i]+k_jiafa;
k_jiafa=he[i]/10;
he[i]%=10;
}
flag=0;
for(int i=length_jiashu;i>=0;i--)
{
if(flag!=0)
{
flag=1;
}
if(flag=1)
{
he2[length_jiashu-i]=he[i];
}
}
}
void gaojingdu_chengfa(int j)
{
length_chengshu=strlen(arr);
for(int i=0;i<length_chengshu;i++)
{
chengshu[i]=arr[length_chengshu-1-i];
}
for(int i=0;i<length_chengshu;i++)
{
ji[i]=chengshu[i]*j+k_chengfa;
k_chengfa=ji[i]/10 ;
ji[i]%=10;
}
if(k_chengfa!=0)
{
ji[length_chengshu]=k_chengfa;
length_chengshu++;
while(ji[length_chengshu-1>=10])
{
ji[length_chengshu]=ji[length_chengshu-1]/10;
ji[length_chengshu-1]%=10;
length_chengshu++;
}
}
while(ji[length_chengshu-1]==0&&length_chengshu>1)
{
length_chengshu--;
}
for(int i=length_chengshu-1;i>=0;i--)
{
arr[length_chengshu-1-i]=ji[i];
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
for(int j=1;j<=i;j++)
{
gaojingdu_chengfa(j);
}
gaojingdu_jiafa(arr);
memset(arr,0,sizeof(arr));
}
sprintf(length,"%d",he2);
printf("%s",length);
return 0;
}
by ouiostream @ 2023-10-25 17:08:38
#include<bits/stdc++.h>
using namespace std;
const int N=1001;
int a[N],b[N];
int n,len,x;
void multiplication(int num){
x=0;
int i;
for(i=1;i<=len;i++){
a[i]=a[i]*num+x;
x=a[i]/10;
a[i]%=10;
}
while(x){
a[i]=x%10;
x/=10;
i++;
}
len=i-1;
}
void add(){
x=0;
for(int i=1;i<=len;i++){
b[i]+=a[i]+x;
x=b[i]/10;
b[i]%=10;
}
}
int main(){
cin>>n;
a[1]=1;
len=1;
for(int i=1;i<=n;i++){
multiplication(i);
add();
}
for(int i=len;i>=1;i--)
cout<<b[i];
cout<<endl;
return 0;
}
上方代码,仅供参考