首页 > 代码库 > C++ 该死的高精度减法

C++ 该死的高精度减法

  没看书直接硬上的结果是,一个简单的高精度减法我用了一个多小时只写了一个90分的代码。之前准备NOIP的时候确实是学了,可惜现在早就还给老师了。

结果回家一看标准程序,顿时有种想哭的赶脚。

  先上我的90分代码:

//高精度减法
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<vector> 
#include<cstdio>
using namespace std;
string a,b;
int dif,dns=0;
vector<int>c;
void change(string x,string y)
{
    dif=abs(x.size()-y.size());
//    cout<<dif;
    int len=max(x.size(),y.size());
//    cout<<len;
    for(int i=len-1;i>=0;i--)
    {
//        cout<<"orz";
        int a=x[i]-0+dns,b=y[i-dif]-0;
        if(len-i > y.size()) {
//            cout<<"$$$$$$$$$$$$$$$$";
            b=0;
        }
        int p=a-b;
//        if(i==0) cout<<a<<endl<<b<<"orz";
//        cout<<a<<‘\t‘<<p<<‘\t‘;
        dns=0; 
        if (p < 0) {
            if(i==0 && dif==0 ) {
                cout<<-;
                dns=0;
                c.resize(0);
                change(y,x);
                return;
            }
            p+=10;
            dns=-1;
        }
//        printf("%d____________\n",p);
//        cout<<p<<‘/‘;
        c.push_back(p);
    }
//    cout<<"|||||||||||||||"<<endl;;
    if(dif==1&&x[0]==0) return;
    

//    cout<<c.size()<<endl;
}
int main()
{
    cin>>a>>b;
    if (a.length() < b.length() ) {
        cout<<-;
        change(b,a);
    }
    else 
    {
        change(a,b);
    }
//    cout<<c.size();
    for(int i=c.size()-1;i>=0;i--)
    {
//        cout<<"orz"<<i<<endl;
        cout<<c[i];
    }
    return 0;
}

里面充斥着大量d_bug的语句,见证着我的血与泪。这个代码错误的地方就在于我选择了string也就是字符串,这样的话比较大小上会很复杂,但是如果用char数组的话就没有这么麻烦了,直接用strcmp就可以搞定,可是苦逼的我当时就是没想到(咳咳!!好吧,其实我是想用string装逼来着)。

下面是用char写的代码:

 

C++ 该死的高精度减法