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

📄 大数的四则运算.cpp

📁 长整数的四则运算
💻 CPP
字号:
// 大数的四则运算.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main(void)
{
	int compere(char *a,char *b);/*比较两数大小*/
	char *grnum_add(char *a,char *b);/*加法*/
	char *grnum_red(char *a,char *b); /*减法*/
	char *grnum_nul(char *a,char *b);/*乘法*/
	char *grnum_div(char *a,char *b,int n);/*除法*/

	char a[1000],b[1000],*c,ch,sign=-1;
	scanf("%s %c %s",a,&ch,b);
	printf("=");
	switch(ch)
	{
	case '+':c=grnum_add(a,b);break;
	case '-':c=grnum_red(a,b);break;
	case '*':c=grnum_nul(a,b);break;
	case '/':c=grnum_div(a,b,50);break;
	default:
		printf("输入错误!\n");sign=100;break;
	}
	if(sign==-1)
	{
		printf("%s\n",c);
	}

  return 0;
}

char *grnum_add(char *a,char *b)/*加法*/
{
	int al,bl,rl,i,j,m,l=0;
	char *r,*q,ai,bj,c;
	al=strlen(a);
	bl=strlen(b);
	if(al<bl) 
	{
		q=a;a=b;b=q;
		i=al;al=bl;bl=i;
	}
	rl=al+2;
	r=(char *)malloc((unsigned int)(rl)*sizeof(char));
	r[rl-1]='\0';
	i=al-1;
	j=bl-1;
	m=rl-2;
	while(i>=0||l!=0)
	{
		if(i<0)
			ai=0;
		else
			ai=a[i]-'0';
		if(j<0)
			bj=0;
		else
			bj=b[j]-'0';
		c=ai+bj+l;
		if(c>9)
		{
			c=c-10;
			l=1;
		}
		else
			l=0;
		
		r[m]=c+'0';
		m--;
		if(i>=0)
			i--;
		if(j>=0) 
			j--;
	}
	if(r!=&r[m+1])
		r=&r[m+1];
	return(r);
}

int compere(char *a,char *b)/*比较两数大小*/
{
	int i=0;
	if(strlen(a)>strlen(b))
		return 1;
	else if(strlen(a)<strlen(b))
		return -1;
	else
	{
		return strcmp(a,b);
	}
}

char *grnum_red(char *a,char *b) /*减法*/
{
	int al,bl,rl,i,j,m;
	char *r,*q,c;
	al=strlen(a);
	bl=strlen(b);
	if(compere(a,b)<0)
	{
		q=a;a=b;b=q; i=al;al=bl;bl=i;
	}
	else if(compere(a,b)==0)
	{
		r=(char *)malloc(2*sizeof(char));
		r[0]='0';
		r[1]='\0';
		return(r);
	}
	rl=al+1;
	r=(char *)malloc((unsigned int)(rl)*sizeof(char));
	r[rl-1]='\0';
	i=al-1;
	j=bl-1;
	m=rl-2;
	while(j>=0)
	{
		c=a[i]-b[j];
		if(c<0)
		{
			c=c+10;
			a[i-1]-=1;
		}
		r[m]=c+'0';
		m--;
		i--;
		j--;
	}
	while(i>=0)
	{
		c=a[i];
		if(c<'0')
		{
			c=c+10;
			a[i-1]-=1;
		}
		r[m]=c;
		i--;m--;
	}
	m++;
	while(r[m]=='0')
		m++;
	r=&r[m];
	return(r);
}

char *grnum_nul(char *a,char *b)/*乘法*/
{
	int al,bl,rl,i,j,k,l;
	char *r,*q,c;
	al=strlen(a);
	bl=strlen(b);
	if(al<bl)
	{
		q=a;a=b;b=q; i=al;al=bl;bl=i;
	}
	rl=al+bl+1;
	r=(char *)malloc((unsigned int)(rl)*sizeof(char));
	for(i=0;i<rl;i++)
		r[i]='0';
	r[rl-1]='\0';
	for(i=al-1;i>=0;i--)
	{
		l=0;
		for(j=bl-1;j>=0;j--)
		{
			c=r[i+j+1]-'0'+(a[i]-'0')*(b[j]-'0')+l;
			k=c%10;
			l=c/10;
			r[i+j+1]=k+'0';
		}
		if(l!=0) r[i+j+1]+='0'+l;
	}
	i=0;
	while(r[i]=='0'&&r[i+1]!='\0')
		i++;
	r=&r[i];
	return(r);
}

char *grnum_div(char *a,char *b,int n)/*除法*/
{
	int al,bl,rl,ql,i,m;
	char *r,*q,*f,k;
	if(compere(b,"0")==0) return NULL;
	al=strlen(a);
	bl=strlen(b);
	rl=al+n+3;
	r=(char *)malloc((unsigned int)rl*sizeof(char));
	q=(char *)malloc((unsigned int)(bl+2)*sizeof(char));
	m=0;
	if(al<bl)
	{
		strcpy(q,a);
		ql=strlen(q);
		r[m++]='0';
	}
	else
	{
		for(i=0;i<bl;i++)
			q[i]=a[i];
		q[i]='\0';
		k='1';
		for(i=bl;i<=al;i++)
		{
			k='1';
			while(compere(q,b)>=0)
			{
				f=grnum_red(q,b);
				strcpy(q,f);
				k++;
			}
			r[m++]=k-1;
			if(compere(q,"0")!=0)
			{
				ql=strlen(q);
				q[ql]=a[i];
				q[ql+1]='\0';
			}
			else
			{
				q[0]=a[i];
				q[1]='\0';
			}
		}
	}
	if(compere(q,"0")!=0&&compere(q,"\0")!=0)
	{
		r[m++]='.';
		q[ql]='0';
		q[ql+1]='\0';
		for(i=0;i<n;i++)
		{
			k='1';
			while(compere(q,b)>=0)
			{
				f=grnum_red(q,b);
				strcpy(q,f);
				k++;
			}
			r[m++]=k-1;
			if(compere(q,"0")==0) break;
			ql=strlen(q);
			q[ql]='0';
			q[ql+1]='\0';
		}
	}
	r[m]='\0';
	i=0;
	while(r[i]=='0'&&r[i+1]!='.')
		i++;
	r=&r[i];
	return(r);
}

⌨️ 快捷键说明

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