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;

}

 

 

猜你喜欢

转载自blog.csdn.net/xzengwei1313/article/details/64921383