当前位置 : 主页 > 编程语言 > c语言 >

大数减法

来源:互联网 收集:自由互联 发布时间:2023-09-07
#include cstdio #include cstring #include iostream #define maxn 107 using namespace std; char a[maxn],b[maxn];//接受输入的字符串 int ta[maxn],tb[maxn];//倒序记录输入的字符串 int main() { int i,t; int len1,len2; scanf("%d",
  #include <cstdio>
  #include <cstring>
  #include <iostream>
  #define maxn 107
  using namespace std;
 
  char a[maxn],b[maxn];//接受输入的字符串
  int ta[maxn],tb[maxn];//倒序记录输入的字符串
 
  int main()
  {
      int i,t;
      int len1,len2;
      scanf("%d",&t);
      while (t--)
      {
          //注意要请0
          memset(ta,0,sizeof(ta));
          memset(tb,0,sizeof(tb));
          scanf("%s%s",a,b);
          len1 = strlen(a);
          len2 = strlen(b);
          int len = max(len1,len2);
          //两个数组统一宽度,倒序记录在ta,tb中,多出的0补上
          for (i = 0; i < len; ++i)
          {

              if (len1 - 1 >= 0)
              {

                  ta[i] = a[len1 - 1] - '0';
                  len1--;
              }
              else ta[i] = 0;
              if (len2 - 1 >= 0)
              {

                  tb[i] = b[len2 -  1] - '0';
                  len2--;
             }
              else tb[i] = 0;
          }
          //模拟加法的过程
          for (i = 0; i < len; ++i)
          {

             ta[i] = ta[i] - tb[i];
              if (ta[i] < 0)
              {

                  ta[i + 1] -= 1;
                  ta[i] += 10;
              }
         }
          bool flag = false;
         //false表示前边还没有出现1-9的数,true表示前边出现了1-9的数字
          //可以处理多余的前导0
         for (i = len; i >= 0; --i)
         {

              if (flag || ta[i])
             {

                  flag = true;
                  printf("%d",ta[i]);
              }
          }
          if (!flag) printf("0");
          printf("\n");
      }
      return 0;
  }
网友评论