理解 vector 是乙個容器,是乙個資料集,裡邊裝了很多個元素。與陣列最大的不同是 vector 可以動態增長。
用 vector 實現大數運算的關鍵是,以 string 的方式讀入乙個大數,然後將字串的每乙個字元 s[i] 以 int 形式賦給 vectora 中的每乙個元素。然後將 a[i] 和 a[j] 加起來(或者乘起來)。每兩個元素加起來的結果 <= 18,乘起來的結果 <= 81。
用 string 實現大數加法的方法跟 vector 差不多,但是用 string 做大數乘法就有點麻煩,我寫了一會兒沒寫出來。
1. 用 vector 實現大數加法:
1 #include 2 #include 3 #include執行:4 #include 56//
#define min(a,b) ((a>b)?(b):(a))7//
#define max(a,b) ((a>b)?(a):(b))
8using
namespace
std;910
void bigsum(vector &a, vector &b, vector &sum)
1119
20 sum.assign(a.size(), 0
);21
for (i=a.size()-1, j=b.size()-1; i>=0; --i)
2228
else sum[i]=a[i];29}
3031
for (k = sum.size() - 1; k >= 0; --k)
3239}40
}4142int
main()
4359
return0;
60 }
2. string 實現大數加法:
1執行://this algorithm is from "oj-killer" of code.google.com
2 #include 3 #include //
freopen
4 #include //
string56
using
namespace
std;
7string sum(string a,stringb)8
13int
i,j;
14for(i=a.length()-1,j=b.length()-1;i>=0;i--,j--)
1523}24
return
a;25}26
intmain()
2736
return0;
37 }
3. vector 實現大數乘法:
輸入:n
輸出:2^(n+1)-1
該演算法來自:
1 #include 2 #include 3 #include執行:4using
namespace
std;56
void multiply(const vector &a, const vector &b, vector &result);78
int main(void)9
2425
for (i = 0; i < a.size() - 1; ++i)
26 cout <
27 cout << c[a.size() - 1] - 1
;28 cout <
30return0;
31}3233
void multiply(const vector &a, const vector &b, vector &result)
3444
45for (k = result.size() - 1; k >= 0; --k)
4655
else
5661}62
}63 }
第9章順序容器 vector string練習題
include includeusing namespace std vector iterator findint vector iterator beg,vector iterator end,int ival int tmain int argc,tchar argv vectorivec i...
大根堆實現
堆 有兩種,一種是大根堆,另一種是小根堆。大根堆的意思是在跟的位置那個數是最大的。同理,小根堆的根元素是最小的。堆是乙個滿的二叉樹,除了最後乙個節點可能不是滿的。所以用陣列去陣列去實現它。乙個節點的index為i,則這個節點的兩個子節點的下標應該為2 i 1和2 i 2 父結點那就是 i 1 2 下...
大整數加法實現
先貼 move num 實現將輸入資料移到陣列末尾 con num 實現將字元轉為數字 add 實現加法,進製操作 注意不列印前導0 include includevoid move num char num while j 0 void conv num char num void add cha...