⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigsum.c

📁 大数加减乘除法
💻 C
字号:
#include<stdio.h>


	
char ch;
int i;


int main()
{
	
	int array1[50],array2[50],answer[50],temp[50];
	char flag,select,buffer;
	do
	{
		printf("\n\n\t*******************大整数运算**********************");
		printf("\n\n\t\t请选择你想要进行的运算:\n\n\t\t\t1.加法(+)\n\t\t\t2.减法(-)\n\t\t\t3.乘法(*)\n\t\t\t4.除法(\\)\n\n\t\t\t输入你的选择:");
		select=getchar();
		buffer=getchar();
		printf("\n请输入第一个数:");
		input(array1);
		printf("\n请输入第二个数:");
		input(array2);
		printf("\n得到的式子为:\n");
		printf("\t     ");
		switch(select)
		{
		case '1': plusdo(array1,array2,answer);output(array1);printf("+");output(array2);break;
		case '2': subdo(array1,array2,answer);output(array1);printf("-");output(array2);break;
        case '3': multdo(array1,array2,answer);output(array1);printf("*");output(array2);break;
        case '4': divedo(array1,array2,answer,temp);output(array1);printf("/");output(array2);break;
		}
		delzero(answer);
		printf("=");
		output(answer);
		printf("\n\n\t\t要不要继续?Y/N");
		flag=getchar();
		buffer=getchar();
		if(flag=='n'||flag=='N')
		     break;
	}while(1);
}



//-----------输入整型数组------------
input(int *a)
{
    i=1;
	ch=getchar();
	if(ch=='-')
		a[0]=1;
	else
	{
	    a[0]=0;
		a[1]=ch-48;
		i=2;
	}
	do
	{
		ch=getchar();
		a[i]=ch-48;
		i++;
	}while(ch!='\n');
	a[i-1]=10;
}

//-----------输出整型数组------------
output(int *b)
{
	if(b[1]==10)
		return printf("0");
	if(b[0]==1)
		    printf("-");
	for(i=1;i<50;i++)
	{
		if(b[i]==10)
			break;
		else
		    printf("%d",b[i]);
	}
}


//------------加法-----------------
plus(int *plus1,int *plus2,int *answer)
{
	int cf=0;
	int p1,p2,p3;
	for(p1=0;p1<50;p1++)
	{
		if(plus1[p1]==10)
			break;
	}
	for(p2=0;p2<50;p2++)
	{
		if(plus2[p2]==10)
			break;
	}
	p3=(p1>p2?p1:p2);
	answer[p3+1]=10;
	p1--;p2--;
	while(p1>0&&p2>0)
	{
		answer[p3]=plus1[p1]+plus2[p2]+cf;
		cf=0;
	    if(answer[p3]>=10)
		{
		    answer[p3]=answer[p3]%10;
	     	cf=1;
		}
		p1--;
		p2--;
		p3--;
	}
	while(p1==0&&p2!=0)
	{
		answer[p3]=plus2[p2];
		p3--;
		p2--;
	}
	while(p2==0&&p1!=0)
	{
		answer[p3]=plus1[p1];
		p3--;
		p1--;
	}
	if(cf==1)
	{answer[p3]=cf;}
	else
		answer[p3]=0;
}




//-------------减法------------
sub(int *sub1,int *sub2,int *answer)
{
	int cf=0;
	int p1,p2,p3;
	int *p;
	while(!compare(sub1,sub2))
	{p=sub1;sub1=sub2;sub2=p;answer[0]=1;}
    for(p1=0;p1<50;p1++)
	{
		if(sub1[p1]==10)
			break;
		
	}
	for(p2=0;p2<50;p2++)
	{
		if(sub2[p2]==10)
			break;
	}
	p3=(p1>p2?p1:p2);
	answer[p3]=10;
	p1--;p2--;p3--;
	while(p1>0&&p2>0)
	{
		answer[p3]=sub1[p1]-sub2[p2]-cf;
		cf=0;
	    if(answer[p3]<0)
		{
		    answer[p3]=answer[p3]+10;
	     	cf=1;
		}
		p1--;
		p2--;
		p3--;
	}
	while(p2==0&&p1!=0)
	{
	    if(cf==0)
		   answer[p3]=sub1[p1];
		else
		   {
		    answer[p3]=sub1[p1]-cf;
			if(answer[p3]<0)
			   answer[p3]=answer[p3]+10;
			else
			   cf=0;
			}
		p3--;
		p1--;
	}
}



//------------乘法-----------
mult(int *mult1,int *mult2,int *answer)
{
    int cf=0;
	int p1,p2,p3;
    int flag,sign;
	for(p1=0;p1<50;p1++)
	{
		if(mult1[p1]==10)
			break;
		
	}
	for(p2=0;p2<50;p2++)
	{
		if(mult2[p2]==10)
			break;
	}
	p1--;p2--;
	p3=p1+p2;
	answer[p3+1]=10;
	flag=p1;
	for(sign=p3;p3>0;p3--)
	    answer[p3]=0;
	for(p3=sign;p2>0;p2--)
	{
		for(p1=flag;p1>0;p1--,p3--)
		{
	      answer[p3]=answer[p3]+mult1[p1]*mult2[p2]+cf;
	      cf=0;
	      if(answer[p3]>=10)
		  {
	        cf=answer[p3]/10;
	        answer[p3]=answer[p3]%10;
		  }
		  
		}
	    if(cf!=0)
		{
	      answer[p3]=cf;
	      cf=0;
		}
		p1=flag;
		p3=--sign;
	}
}

//----------------除法------------------------
dive(int *dive1,int *dive2,int *answer,int *temp)
{
    int p1,p2,p3=1;
	for(i=0;i<50;i++)
	    answer[i]=0;
	for(p2=0;p2<50;p2++)
	{
		if(dive2[p2]==10)
			break;
	}
	p2--;p1=p2;
	temp[p1+1]=10;
	while(p1>0)
    {
		temp[p1]=dive1[p1];
		p1--;
	}
	p1=p2;
	while(dive1[p1]!=10)
	{
		while(compare(temp,dive2))
		{
			sub(temp,dive2,temp);
			delzero(temp);
			answer[p3]++;
		}
		p3++;p1++;
		add(temp,dive1[p1]);
	}
	answer[p3]=10;

}

	

//----------比较两数大小-------
int compare(int *com1,int *com2)
{
	int i=1,j=1;
	while(com1[i]!=10)
	  i++;
	while(com2[j]!=10)
	  j++;
	i--;j--;
    if(i<j)
		return 0;
	else if(i>j)
		return 1;
	else
	{
		for(i=1;i<=j;i++)
		{
			if(com1[i]<com2[i])
				return 0;
			else if(com1[i]>com2[i])
				return 1;
			else
				continue;
		}
	}
	return 1;
}

//-----------加数移入temp------
add(int *temp,int addnum)
{
	int i=1;
	while(temp[i]!=10)
	  i++;
	temp[i]=addnum;
	temp[++i]=10;
}






//----------去前面的0-------------
delzero(int *del)
{
	int flag=0,num=0;
	int i,j;
	for(i=1;del[i]<10;i++)
	{
		if(del[i]==0&&flag==0)
			num++;
		else
			flag=1;
	}
	if(num!=0)
	{
		for(j=1;(j+num)<=i;j++)
		   del[j]=del[j+num];
	}
}


//------------最终加法-----
plusdo(int *array1,int *array2,int *answer)
{
	int flag=0;
	if(array1[0]==1)
		array1[0]=2;
    flag=array1[0]+array2[0];
	switch(flag)
	{
	case 0 : plus(array1,array2,answer);break;
	case 1 : sub(array1,array2,answer);break;
	case 2 : sub(array2,array1,answer);break;	     
	case 3 : plus(array1,array2,answer);answer[0]=1;break;
	}
}


//-----------最终减法-----------
subdo(int *array1,int *array2,int *answer)
{
	int flag=0;
	if(array1[0]==1)
		array1[0]=2;
    flag=array1[0]+array2[0];
	switch(flag)
	{
	case 0 : sub(array1,array2,answer);break;
	case 1 : plus(array1,array2,answer);break;
	case 2 : plus(array1,array2,answer);answer[0]=1;break;	     
	case 3 : sub(array2,array1,answer);break;
	}
}

//-----------最终乘法-----------
multdo(int *array1,int *array2,int *answer)
{
	int flag=0;
    flag=array1[0]+array2[0];
	switch(flag)
	{
	case 0 : mult(array1,array2,answer);break;
	case 1 : mult(array1,array2,answer);answer[0]=1;break;
	case 2 : mult(array1,array2,answer);break;
	}
}

//-----------最终除法-----------
divedo(int *array1,int *array2,int *answer,int *temp)
{
	int flag=0;
    flag=array1[0]+array2[0];
	switch(flag)
	{
	case 0 : dive(array1,array2,answer,temp);break;
	case 1 : dive(array1,array2,answer,temp);answer[0]=1;break;
	case 2 : dive(array1,array2,answer,temp);break;
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -