a-b(高精度)

我现在已经是才语言中的一员了,我在此献上今日的佳作——a-b(高精度),以下是我的程序及其注释,欢迎各位来观赏,耶!

程序:

#include<stdio.h>

#include<string.h>

char s1[1000];

int a[1000]={0},b[1000]={0},c[1000]={0};

int main()

{

      int i,j,z,l1,l2,l,o;

      freopen("hp-.in","r",stdin);

      freopen("hp-.out","w",stdout);

      scanf("%s",s1);  --------------------------------------------//a

      l1=strlen(s1);

      for(i=0;i<=l1-1;i++) -------------------------------------  //把s1(被减数)转换成数字,并倒序存入a数组

           a[l1-1-i]=s1[i]-'0';

      scanf("%s",s1);

      l2=strlen(s1);

      for(i=0;i<=l2-1;i++) --------------------------------- //把s1(减数)转换成数字,并倒序存入b数组

           b[l2-1-i]=s1[i]-'0';

          

      if(l1==l2){  

           for(j=l1;j>=0;j--)

           {

                      if(a[j]>b[j])  -----------------------------//a大

                      {

                            o=0;

                            break;

                      }

                      if(b[j]>a[j])  -----------------------------//b大

                      {

                            o=1;

                            break;

                      }

           }

      }

      if(l1>l2||o==0) ---------------------------------------//a大时

      {   

           l=l1;

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

           {

                 if(a[i]<b[i])

                 {

                      a[i]=a[i]+10;

                      a[i+1]-=1;

                 }

                 c[i]=a[i]-b[i];

           }

           while(l>1&&c[l-1]==0) l--;-----------------------------------  //舍去高位中无用的0

           for(i=l-1;i>=0;i--)  ------------------------------------------//输出

           {

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

           }

      }   

      else

      {

           printf("-");

           l=l2;

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

           {

                 if(a[i]>b[i])

                 {

                      b[i]=b[i]+10;

                      b[i+1]-=1;

                 }

                 c[i]=b[i]-a[i];

           }

           while(l>1&&c[l-1]==0) l--; ------------------------------------//舍去高位中无用的0

           for(i=l-1;i>=0;i--)------------------------------------------- //输出

           {

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

           }

      }

      return 0;

}

进过这一次的编写,我更加熟练的编写程序,我会向前更进一步!(^o^)/O(∩_∩)O哈哈~( ^_^ )/~~拜拜

原文地址:https://www.cnblogs.com/chentao1c/p/5649390.html