La idea básica:
Si la terminación, puede reducir efectivamente la longitud;
Puntos clave:
No;
#include <iostream> #include <vector> #include <string> #include <sstream> #include <algoritmo> using namespace std; vector <string> carga (cadena s) { int index; cadena B; vector <string> vec; ss stringstream (s); while (getline (ss, b,) '') { vec.push_back (b); } Devolver vec; } Cadena add (cadena a, b string, int & ca) { int max = -1; cadena rn = ""; si (a.size ()> B.Size ()) { = max B.Size (); rn = a.substr (max, a.size () - max); } Else if (a.size () <B.Size ()) { = max a.size (); = Max a.size (); } Int carry = 0; res String = ""; for (int i = max - 1; i> = 0; i--) { int temp = (a [i] - '0') + (b [i] - '0') + carry; res = char ( '0' + temp% 10) + res; carry = temp / 10; } Ca = carry; res + = rn; while (! res.size () = 0 && res [res.size () - 1] == '0') res.pop_back (); res regresar; } Add_in cadena (cadena a, b string, int cn) { inversa (a.begin (), a.end ()); revertir (b.begin (), b.end ()); int carry = CN; res String = ""; for (int i = 0; i <a.size () && i <B.Size (); res = res + char ( '0' + temp% 10); carry = temp / 10; } Si (res.size () <a.size ()) { for (int i = res.size (); i <a.size (); i ++) { si (carry == 0) res + = a [ yo]; else { temp int = (a [i] - '0') + carry; res + = char ( '0' + temp% 10); carry = temp / 10; } } Si (carry = 0) res + = '1'; } Else if (res.size () <B.Size ()) { for (int i = res.size (); i <B.Size (); i ++) { si (carry == 0) res + = b [yo]; else { int temp = (b [i] - '0') + carry; res + = char ( '0' + temp% 10); carry = temp / 10; Si (carry! } Else { si (carry = 0) res + = '1'; } Inversa (res.begin (), res.end ()); res regresar; } Int main () { string s1, s2; while (cin >> s1 >> s2) { vector <string> SS1 = carga (S1); vector <string> SS2 = carga (s2); int carry = 0; res String = add (SS1 [1], SS2 [1], acarreo); cadena res_in = add_in (SS1 [0], SS2 [0], acarreo); res_in tribunal << << "" << res << endl; } }