【大数】递归写大数感觉良好

来源:互联网 发布:mac怎么关闭系统弹出 编辑:程序博客网 时间:2024/06/04 20:01

上软件工程课讲到迭代开发突然想到了用递归写大数怎么样(效率和节操是一个价)。

 

于是写了个加法的,感觉良好.....

 

#include <iostream>#include <string>using namespace std;class Adder{private:string a;string b;string c;int alen;int blen;void work(int add=0);public:Adder(string& x,string& y); friend ostream& operator << (ostream &o,Adder& a);};Adder::Adder(string& x,string& y):a(x),b(y),c(""),alen(x.length()),blen(y.length()){this->work();}void Adder::work(int add){if(alen) add += a[alen-1] - '0',alen--;if(blen) add += b[blen-1] - '0',blen--;if(alen||blen||add) c.push_back(char(add%10 + '0')),work(add/10); }ostream& operator << (ostream& o,Adder& ad){int len = ad.c.length();for(;len--;) o << ad.c[len];return o;}int main(){string a = "123";string b = "789"; Adder ans(a,b);cout << ans << endl; return 0;}


 

补上大数乘法的,这个写水了......

 

#include <iostream>#include <string> using namespace std;class Multer{private:string a;string b;string c;int alen;int blen;void work(int loc=0);int toInt(char x);public:Multer(string& x,string& b);string ans();friend ostream& operator << (ostream& o,Multer& m);}; Multer::Multer(string& x,string& y){a = x;b = y;c = "";alen = x.length();blen = y.length();this->work();}int Multer::toInt(char x){return x - '0';}void Multer::work(int loc){if(!blen) return;for(int i=1;i<=alen;++i){int add = c[i+loc-1] + toInt(a[alen-i]) * toInt(b[blen-1]);if(c.length() <= i+loc-1) c.push_back(add%10);else c[i+loc-1] = add%10;if(add/10 && c.length() <= i+loc)   c.push_back(add/10);else c[i+loc] += add/10;}blen--,work(loc+1);}string Multer::ans(){return c;}ostream& operator << (ostream& o,Multer& m){int len = m.c.length();for(;len--;) o << (int)m.c[len];return o;}int main(){return 0;}


强迫症吐槽:C++类里的格式究竟怎么样才行啊...

 

A:

class Show{public://////private://////};


 

B:

class Show{public://////private://////};


C:

class Show{public://    //    //private://    //    //};


最早我是C型的,但是用QT给我用回A类型了.....


 

原创粉丝点击