[Cpp] // high-precision addition # include <iostream> # include <cstring> using namespace std; int * strtoint (char * str) {int I, len = strlen (str ); int * a = new int [(len + 1) * sizeof (int)]; for (I = 0; I <len; I ++) a [I] = (int) str [len-i-1]-48; return a;} char * inttostr (int * a, int n) {int I; char * str = new char [(n + 1) * sizeof (char)]; for (I = 0; I <n; I ++) str [I] = (char) a [n-i-1] + 48; str [n] = '\ 0'; return str;} int check (int * a, int n) {int k = 0, l En = n; while (a [len-1] = 0 & len> 1) len --; for (k = 0; k <len; k ++) if (a [k]> = 10) {a [k + 1] = a [k + 1] + a [k]/10; a [k] = a [k] % 10;} if (a [k]! = 0) len = k + 1; return len;} char * addition (char * m1, char * m2) {int I, len1, len2, len, c = 0; int * t1, * t2; len1 = strlen (m1); len2 = strlen (m2); len = (len1> = len2 )? Len1: len2; t1 = new int [(len + 2) * sizeof (int)]; t2 = new int [(len + 2) * sizeof (int)]; t1 = strtoint (m1); t2 = strtoint (m2); for (I = len1; I <len + 1; I ++) t1 [I] = 0; for (I = len2; I <len + 1; I ++) t2 [I] = 0; for (I = 0; I <len; I ++) t1 [I] + = t2 [I]; len = check (t1, len); return inttostr (t1, len);} int main () {char m1 [1000], m2 [1000]; while (cin> m1> m2) cout <addition (m1, m2) <endl; return 0 ;} // high-precision multiplication # include <iostream> # include <cstring> usi Ng namespace std; int * strtoint (char * str) {int I, len; len = strlen (str); int * a = new int [(len + 1) * sizeof (int)]; for (I = 0; I <len; I ++) a [I] = (int) str [len-i-1]-48; return ;} char * inttostr (int * a, int n) {char * str = new char [(n + 1) * sizeof (int)]; for (int I = 0; I <n; I ++) str [I] = (char) a [n-i-1] + 48; str [n] = '\ 0'; return str ;} int check (int * a, int n) {int k, len = n; while (a [len-1] = 0 & len> 1) len --; for (k = 0; k <len; k + +) {A [k + 1] + = a [k]/10; a [k] % = 10;} if (a [k]! = 0) len = k + 1; return len;} char * multiply (char * m1, char * m2) {int I, j, len1, len2, len, c = 0, * t1, * t2, * prod; len1 = strlen (m1); len2 = strlen (m2); len = len1 + len2; t1 = new int [(len1 + 1) * sizeof (int)]; t2 = new int [(len2 + 1) * sizeof (int)]; prod = new int [(len + 1) * sizeof (int)]; t1 = strtoint (m1); t2 = strtoint (m2); for (I = 0; I <len + 1; I ++) prod [I] = 0; for (I = 0; I <len1; I ++) for (j = 0; j <len2; j ++) prod [I + j] + = t1 [I] * t2 [j]; len = check (prod, len); return inttostr (prod, len);} int main () {char m1 [1000], m2 [1000]; while (cin> m1> m2) cout <multiply (m1, m2) <endl; return 0 ;}