萌新求助,不知道我的高精度加和乘错哪里了
查看原帖
萌新求助,不知道我的高精度加和乘错哪里了
1113550
Dihuan楼主2023/10/25 09:02

大一刚开学新生求助,如有什么错误和不妥,请各位大佬指正

#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;
}

2023/10/25 09:02
加载中...