Задача «Целая арифметика над строками»

Создать 5 функций, реализующих целые арифметические операции с неограниченным числом знаков:

const char* nsadd(const char*, const char*);
const char* nssub(const char*, const char*);
const char* nsmul(const char*, const char*);
const char* nsdiv(const char*, const char*);
const char* nsmod(const char*, const char*);

На входе -- две строки, содержащие десятичные цифры, на выходе -- созданная через malloc строка, содержащая результат. Обязательно -- проверка ошибки аргументов и ситуации деления на ноль.

Будет бонусом реализовать умножение алгоритмом Карацубы (см. лекцию про рекурсивные алгоритмы «разделяй и властвуй»).

Как усложнение -- 16-ричная и т.д. арифметика.