大數加法(處理不了負數)
高精度的加法思想
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;
}