高精度减法

  1. 高精度减法类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数要大,同时注意借位的处理。
  2. 进位处理:if(a[i] < b[i])
          { a[i+1]--; a[i] = a[i] + 10; }
          c[i] = a[i] - b[i];
  3. 位数的确定:假设c用来保存大数据a与大数据b的差,那么c的长度lenc = max(lena,lenb)
  4. 代码:
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #define max 200
    using namespace std;
    
    
    int mian()
    {
        char a[max];
        char b[max];
        int c[max];
        int a1[max], b1[max];
        memset(c, 0, sizeof(c));
        //判断输入a,b的大小
        if (strlen(a)>strlen(b))
        {
            cout << "结果为正\n";
        }
        else if (strlen(a) < strlen(b))
        {
            cout << "结果为负\n";
            cout << '-';
            //交换两数
            char n[max];
            strcpy(n, a);
            strcpy(a, b);
            strcpy(b, n);
        }
        else
        {
            if (strcmp(a, b) == 0)
            {
                cout << "两数相等\n";
    
            }
            else if (strcmp(a, b) > 0)
            {
                cout << "结果为正数\n";
            }
            else
            {
                cout << "结果为负\n";
                char n[max];
                strcpy(n, a);
                strcpy(a, b);
                strcpy(b, n);
            }
        }
        int lena, lenb;
        lena = strlen(a);//求a的长度
        lenb = strlen(b);//求n的长度
        for (int i = 0; i < lena; i++)//将a转换为数字后存储在a1中
        {
            a1[lena - i] = a[i] - '0';//先处理低位,所以将低位与高位换位置
        }
        for (int i = 0; i < lenb - 1; i++)
        {
            b1[lenb - i] = b[i] - '0';
        }
        int lenc = 0;
        if (lena < lenb)
            lenc = lenb;
        else
            lenc = lena;
        for (int i = 1; i <= lenc; i++)
        {
            if (a1[i] < b1[i])  //如果被减数的某位上的数字小于减数则要借位处理
            {
                a1[i + 1]--;      //借位后高位减一
                a[i] = a[i] + 10;
            }
            c[i] = a1[i] - b1[i];
        }
        while (c[lenc] == 0 && lenc > 1)  ////防止最高位0被输出,例如0211
        {
            lenc--;
        }
        for (int i = lenc; i > 0; i--)
            cout << c[i];
        return 0;
    }

     

posted @ 2020-12-15 16:48  Quella'  阅读(310)  评论(0)    收藏  举报
Live2D