首页 > 代码库 > 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++ 该死的高精度减法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。