📄 大数的四则运算.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 + -