同理参照高精度算法-减法篇,一个模板改过来的
解决跟高精度减法不同的问题:
①位数问题
减法篇位数会减小(最大会到1位)
加法篇位数会增大(最大会多1位)
乘法篇位数会增大(最大不超过两数位数之和)
即改变maxl的值
int maxl = s1.length() + s2.length();
②前导零问题
1 while (ans[maxl] == 0 && maxl > 1) 2 maxl--;
终极代码:
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 int arr1[200000], arr2[200000], ans[200000]; 6 string chengfa(string s1, string s2) 7 { 8 int maxl = s1.length() + s2.length(); 9 string ss; 10 if (s1.length() < s2.length() || (s1.length() == s2.length() && s1 < s2)) 11 { 12 return chengfa(s2, s1); 13 } 14 for (int i = 1; i <= s1.length(); i++) 15 arr1[i] = s1[s1.size() - i] - ‘0‘; 16 for (int i = 1; i <= s2.length(); i++) 17 arr2[i] = s2[s2.size() - i] - ‘0‘; 18 for (int i = 1; i <= s1.length(); i++) 19 { 20 for (int j = 1; j <= s2.length(); j++) 21 { 22 ans[i + j - 1] += arr1[i]*arr2[j]; 23 } 24 } 25 for (int i = 1; i < s1.length() + s2.length(); i++) 26 { 27 if (ans[i] > 9) 28 { 29 ans[i + 1] += ans[i] / 10; 30 ans[i] %= 10; 31 } 32 } 33 while (ans[maxl] == 0 && maxl > 1) 34 maxl--; 35 for (int i = maxl; i > 0; i--) 36 ss += ans[i] + ‘0‘; 37 return ss; 38 } 39 int main() 40 { 41 string s1, s2; 42 cin >> s1 >> s2; 43 cout << chengfa(s1, s2); 44 }
原文:https://www.cnblogs.com/luoyoooo/p/12535318.html