C-高精度减法

先将字符数组内容复制到int型数组里,再一次考虑减法借位问题。

#include<stdio.h>

#include<string.h>

int  main()

{

       int i,j,alen,blen,max;

       char a[50],b[50];

       int a1[50]={0},b1[50]={0};

       int c[50]={0};

       printf("请输入被减数:");

       gets(a);

       printf("请输入减数:");

       gets(b);

       alen=strlen(a);

       blen=strlen(b);

       max=(alen>blen)?alen:blen;

       for(i=0;i<alen;i++)

              a1[i]=a[i]-'0';

       for(i=0;i<blen;i++)

              b1[i]=b[i]-'0';

       if((alen==blen)&&(strcmp(a,b)==0))

              printf("0");

       if(strcmp(a,b)>0||alen>=blen)

       {

              for(i=alen-1,j=blen-1;i>=0||j>=0;i--,j--)

              {

                     if(a1[i]>=b1[j])

                            c[i]=a1[i]-b1[j];

                     else

                     {

                            a1[i-1]=a1[i-1]-1;

                            a1[i]=a1[i]+10;

                            c[i]=a1[i]-b1[j];

                     }

              }

              i=0;

              while(c[i]==0)

                     i++;

              for(i;i<max;i++)

                     printf("%d",c[i]);

             

       } 

       else

       {

              printf("-");

              for(i=alen-1,j=blen-1;i>=0||j>=0;i--,j--)

              {

                     if(b1[j]>=a1[i])

                            c[j]=b1[j]-a1[i];

                     else

                     {

                            b1[j-1]=b1[j-1]-1;

                            b1[j]=b1[j]+10;

                            c[j]=b1[j]-a1[i];

                     }

              }

              j=0;

              while(c[j]==0)

                     j++;

              for(j;j<max;j++)

                     printf("%d",c[j]);

       }

       printf("\n");

 

       return 0;

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值