大數加法(處理不了負數)

高浩杰發表於2024-06-29

大數加法(處理不了負數)

高精度的加法思想

1.把大數存到字串;
2.字串的每個字元數字都透過ASCII轉換存到陣列,注意的是要低位存在陣列開頭:a[i] = s[len-i-1]-'0';
3.獲取最大的數長度:max(len1,len2) ;
4.把a,b值加入到c陣列: c[i] = a[i]+b[i];
5.c陣列加法進位的算式:
① c[i+1] += c[i]/10;
② c[i] %= 10;
6.數字溢位,長度+1;
7.反向輸出結果;

程式碼實現

#include<iostream>
#include<string>
using namespace std;
string s1, s2;
int a[10000], b[10000], c[100001];
int main() {
	//	1.輸入值,長度 
	cin >> s1 >> s2;
	int len1 = s1.size();
	int len2 = s2.size();
	//	2.把字元轉為整數存到陣列
	//  注意要個位存到陣列開頭 
	for (int i = 0; i < len1; i++) {
		a[i] = s1[len1 - i - 1] - '0';
	}
	for (int i = 0; i < len2; i++) {
		b[i] = s2[len2 - i - 1] - '0';
	}
	//	3.獲取最大的數。 
	int len = max(len1, len2);
	// 對各個位數進行相加 
	for (int i = 0; i < len; i++) {
		c[i] = a[i] + b[i];
	}
	//4.進位
	for (int i = 0; i < len; i++) {
		c[i + 1] += c[i] / 10;
		c[i] %= 10;
	}
	//5.溢位
	while (c[len] == 0 && len > 0) {
		len--;
	}
	if (c[len] > 0) {
		len++;
	}
	//6.反向輸出 
	for (int i = len - 1; i >= 0; i--) {
		cout << c[i];
	}
	return 0;
}

相關文章