理解 vector 是一個容器,是一個數據集,裡邊裝了很多個元素。與數組最大的不同是 vector 可以動態增長。
用 vector 實現大數運算的關鍵是,以 string 的方式讀入一個大數,然後將字串的每一個字符 s[i] 以 int 形式賦給 vector<int> a 中的每一個元素。然後將 a[i] 和 a[j] 加起來(或者乘起來)。每兩個元素加起來的結果 < 18,乘起來的結果 < 81。所以,其實用 short 型的 vector 就夠用了,short 范圍為 2^8-1,255。
用 string 實現大數加法的方法跟 vector 差不多,但是用 string 做大數乘法就有點麻煩,我寫了一會兒沒寫出來。
1. 用 vector 實現大數加法:
#include <iostream> #include <vector> #include <> #include <cstdlib> bigSum(vector<> &a, vector<> &b, vector<> & ( a.size() < vector<> vectmp= a= b= sum.assign(a.size(), (i=a.size()-, j=b.size()-; i>=; -- (j>= sum[i]=a[i]+ j-- sum[i]= (k = sum.size() - ; k >= ; -- (sum[k] > sum[k]-= (k!=) sum[k-]++ sum.insert(sum.begin(), (cin>>x>> vector<> ( i=; i<x.length(); ++ a.push_back(x[i]- ( i=; i<y.length(); ++ b.push_back(y[i]- ( i=; i<c.size(); ++ cout<< cout<<endl<< }
運行:
2. string 實現大數加法:
#include <iostream> #include <cstdlib> #include <> Sum( a, (a.length()< temp=a; a=b; b= (i=a.length()-,j=b.length()-;i>=;i--,j-- a[i]=(a[i]+(j>=?b[j]-: (a[i]> a[i] -= (i) a[i-]++ a=+ freopen(, (cin>>s1>> cout<<<<s1<<endl<<<<s2<< cout<<<<Sum(s1,s2)<<endl<< }
運行:
3. vector 實現大數乘法:
輸入:n
輸出:2^(n+1)-1
該算法來自:
#include <iostream> #include <vector> #include <> multiply( vector<> &a, vector<> &b, vector<> & main( (cin >> vector<> a.push_back( b.push_back( (i = ; i <= n; ++ c.assign(a.size() + b.size() - , a = (i = ; i < a.size() - ; ++ cout << cout << c[a.size() - ] - cout << multiply( vector<> &a, vector<> &b, vector<> & (i = ; i < a.size(); ++ k = (j = ; j < b.size(); ++ result[k++] += a[i] * (k = result.size() - ; k >= ; -- (result[k] > (k != result[k - ] += result[k] / result[k] %= tmp = result[k] / result[k] %= }
運行: