您的位置:首页 > 其它

x 大数减法

mrgaohaihang 2020-04-02 18:37 85 查看 https://blog.csdn.net/mrgaohai
#include<stdio.h>
#include<string.h>
int s[100000]={0};
void f(int s[],int a[],int b[],int len)
{
int i;
for(i=0;i<len;i++)
{
if(a[i]>=b[i])
{
s[i]=a[i]-b[i];
}
else
{
a[i]+=10;
a[i+1]--;
s[i]=a[i]-b[i];
}
}
return ;
}
int main(void)
{
int a[100000],i,j,len,b[100000];
char x[100000],y[100000];
scanf("%s%s",x,y);
len=strlen(x)>strlen(y)?strlen(x):strlen(y);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(s,0,sizeof(s));
for(i=strlen(x)-1, j=0;i>=0;i--)
{
a[j++]=x[i]-'0';
}
for(i=strlen(y)-1,j=0;i>=0;i--)
{
b[j++]=y[i]-'0';
}
int k=0;
if(strlen(x)>strlen(y))
k=1;
if(strlen(x)<strlen(y))
k=2;
if(strlen(x)==strlen(y))
{
for(i=len;i>=0;i--)
{
if(a[i]==b[i])
continue;
if(a[i]>b[i])
{
k=1;
break;
}
if(a[i]<b[i])
{
k=2;
break;
}
}
}
if(k==0)
printf("0");
if(k==1)
{
f(s,a,b,len);
for(i=len-1;i>=0;i--)
{
if(s[i]==0)
len--;
else
break;
}

for(j=len-1;j>=0;j--)
printf("%d",s[j]);
}
if(k==2){

f(s,b,a,len);
printf("-");
for(i=len-1;i>=0;i--)
{
if(s[i]==0)
len--;
else
break;
}
for(j=len-1;j>=0;j--)
printf("%d",s[j]);
}
return 0;
}

大数减法,多打几遍,注意去零即可。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
mrgaohaihang 发布了23 篇原创文章 · 获赞 1 · 访问量 518 私信 关注
标签: