首页 > 代码库 > 第五章Biginteger部分实现
第五章Biginteger部分实现
1 #include <cstdio> 2 #include <iostream> 3 #include <vector> 4 5 using namespace std; 6 7 struct BigInteger 8 { 9 static const int BASE=100000000; 10 static const int WIDTH=8; 11 12 vector<int> s; 13 14 BigInteger(long long int num=0){ *this=num; } 15 16 BigInteger operator=(long long num) 17 { 18 s.clear(); 19 20 do 21 { 22 s.push_back(num%BASE); 23 num/=BASE; 24 25 }while(num>0); 26 27 return *this; 28 } 29 30 BigInteger operator=(const string& num) 31 { 32 s.clear(); 33 34 for(int end=num.length()-1;;) 35 { 36 int x,start=end-WIDTH+1; 37 38 if(start>=0) 39 { 40 sscanf(num.substr(start,WIDTH).c_str(),"%d",&x); 41 s.push_back(x); 42 end=start-1; 43 } 44 else if(end>=0) 45 { 46 sscanf(num.substr(0,end+1).c_str(),"%d",&x); 47 s.push_back(x); 48 break; 49 } 50 else 51 break; 52 } 53 54 return *this; 55 } 56 57 BigInteger operator+(const BigInteger& b) 58 { 59 BigInteger c; 60 c.s.clear(); //必须先clear为空不然会有一个默认的0值在c.s 中 61 62 int c1=0; 63 64 for(unsigned int i=0;;i++) 65 { 66 if(i<s.size() && i<b.s.size()) 67 { 68 int sum=s[i]+b.s[i]+c1; 69 c1=sum/BASE; 70 sum%=BASE; 71 c.s.push_back(sum); 72 } 73 else if(i<s.size() && i>=b.s.size()) 74 { 75 int sum=s[i]+c1; 76 c1=sum/BASE; 77 sum%=BASE; 78 c.s.push_back(sum); 79 } 80 else if(i>=s.size() && i<b.s.size()) 81 { 82 int sum=b.s[i]+c1; 83 c1=sum/BASE; 84 sum%=BASE; 85 c.s.push_back(sum); 86 } 87 else if(i>=s.size() && i>=b.s.size()) 88 { 89 if(c1==1) 90 c.s.push_back(c1); 91 else 92 break; 93 } 94 95 } 96 97 return c; 98 99 } 100 101 bool operator<(const BigInteger& b) 102 { 103 if(s.size()!=b.s.size()) return s.size()<b.s.size(); 104 105 for(unsigned int i=s.size()-1;i>=0;i--) 106 if(s[i]!=b.s[i]) 107 return s[i]<b.s[i]; 108 109 return false; 110 } 111 112 friend ostream& operator<<(ostream& out,const BigInteger& x); 113 friend istream& operator>>(istream& in,const BigInteger& x); 114 }; 115 116 ostream& operator<<(ostream& out,const BigInteger& x) 117 { 118 119 120 for(int i=x.s.size()-1;i>=0;i--) 121 { 122 if(x.s[i]==0) 123 { 124 for(int j=1;j<=x.WIDTH;j++) 125 out<<0; 126 } 127 else 128 out<<x.s[i]; 129 } 130 131 //cout<<x.s.size()<<endl; 132 return out; 133 } 134 135 istream& operator>>(istream& in,BigInteger& x) 136 { 137 string s; 138 if(!(in>>s)) return in; 139 140 x=s; 141 return in; 142 } 143 144 int main() 145 { 146 BigInteger bi1; 147 BigInteger bi2; 148 149 cin>>bi1; 150 cin>>bi2; 151 152 153 if(bi1<bi2) 154 { 155 cout<<bi1<<endl; 156 cout<<bi2<<endl; 157 } 158 else 159 { 160 cout<<bi2<<endl; 161 cout<<bi1<<endl; 162 } 163 164 cout<<bi2+bi1<<endl; 165 return 0; 166 167 }
第五章Biginteger部分实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。