高精度加法筆記

才瓯發表於2024-10-06
vector<int> u; //儲存a倒序的每個數
vector<int> v; //儲存b倒序的每個數
vector<int> add(vector<int> m, vector<int> n) {//高精度加法
	vector<int> temp;//temp陣列儲存相加後的每個數
	int t=0;//t作為每個數相加的和
	for (int i = 0; i < m.size() || i < n.size(); i++) {//遍歷u,v陣列
		if (i < m.size()) t += m[i];
		if (i < n.size()) t += n[i];
		temp.push_back(t % 10);//向temp尾部中塞入每個數相加後的最後一位
		t /= 10;//計算進位值存入下一位的計算
	}
	if (t > 0) {//當最後兩個數相加後仍需要進位
		temp.push_back(1);//向temp尾部塞入1
	}
	return temp;
}

int main() {
	string a, b;
	cin >> a >> b;
	/*例:a=123456,b=123456*/
	for (int i = a.size() - 1; i >=0; i--) u.push_back(a[i] - '0');//將字串形式的a,b轉換為int十進位制形式
	for (int i = b.size() - 1; i >=0; i--) v.push_back(b[i] - '0');
	//從a,b最後一位開始讀取,逐個塞入u,v的尾部
	/*例:u=654321,v=654321*/
	vector<int> c = add(u, v);
	for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);//計算後再次倒序輸出c
	/*例:c=219642,輸出246912為最後答案*/
	return 0;
}

//模擬豎式計算過程,重點在倒序相加,便於計算機處理

//使用vector動態陣列,節省空間

相關文章