одержат младшие, средние и старшие 32 бита 96-разрядного целого числа
Немного не понял почему у вас число 2 147 483 648 - {0, 1, 0, 0}, а не 2 147 483 648 - {2 147 483 647, 1, 0, 0}
carry += c.bits[i + j] + (long long)a.bits[i] * b.bits[j];
{{98656,8,0,0}}, так как 4444 * 222 = 986 568
Диапазон может быть любой? Вроде от "ab" до "ccabc"? Или, например, он включает все строки длины от 1 до N?