柿子饼同学 发表于 2022-5-12 22:06:07

高精度减法

本帖最后由 柿子饼同学 于 2022-5-12 22:07 编辑

#include <bits/stdc++.h>
using namespace std;

string sub(string a, string b){
        bool ism = 0;
        int l, dl, c = 0;
        if(a.size() < b.size()){
                swap(a, b);
                ism = 1;
        }
        if(a.compare(b) < 0 && a.size() == b.size()){
                swap(a, b);
                ism = 1;
        }
        l = b.size();
        dl = a.size() - b.size();
        for(int i = l-1; i >= 0; i--){
                if(a-'0' - c < b-'0'){
                        ans = char(a + 10 - b - c + '0') + ans;
                        c = 1;
                }
                else{
                        ans = char(a - b - c + '0') + ans;
                        c = 0;
                }
        }
        ans.erase(0, ans.find_first_not_of('0'));
      if(!ism) ans = '-' + ans;
        return ans;
}

int main(){
      ios::sync_with_stdio(0);
        string a, b;
        cin >> a >> b;
        cout << sub(a, b) << endl;
      return 0;
}
我的高精减法代码如上, 不知道哪里出了问题, 求指点{:10_262:}

jhq999 发表于 2022-5-13 08:44:32

本帖最后由 jhq999 于 2022-5-13 08:51 编辑

#include <iostream>
#include <string>
using namespace std;

string sub(string a, string b){
      bool ism = 0;
      int l, dl;
        if(a.size() < b.size()||(a.compare(b) < 0 && a.size() == b.size())){
               swap(a, b);
               ism = 1;
      }
      l = a.size();
      dl = a.size() - b.size();
      for(int i = l-1; i >= 0; i--){
                //if(a<'0')a+=10,a--;
                if(i>=dl)
                {
                        if(a<b)
                        {
                                a+=10;
                                a--;
                        }
                        a=a-b+'0';
               }
                else if(a<'0')
                        a+=10,a--;               
      }
        b="";
        if(ism)b="-";
        b+=a;
      return b;
}

int main(){
      ios::sync_with_stdio(0);
      std::string a, b;
        std::cin >> a >> b;
        cout << sub(a, b) << endl;
      return 0;
}
页: [1]
查看完整版本: 高精度减法