[P&AM Lab] Бибиотека больших чисел
Егор Одинцов
rg-400 на list.ru
Чт Фев 24 19:34:50 MSK 2011
24.02.2011 01:23, LonelyRuyK пишет:
> for ( i = 0; i<= pb->top; i++) {
> res->val[i] = ( tail + pa->val[i] + pb->val[i]) % BASE; // sum p
> tail = ( tail + pa->val[i] + pb->val[i]) / BASE;
> }
res->val[i] = ( tail + pa->val[i] + pb->val[i]) % BASE;
Здесь % BASE не нужен вроде, т.к. он и так не выйдет за пределы 0..BASE-1
tail = ( tail + pa->val[i] + pb->val[i]) / BASE
Только тут нужно помнить про приведение типа.
И если захотеть изменить тип массива val на unsigned int, а базу
поставить 2^32
можно получать tail = 0 всегда.
А если у тебя два числа a и b, то можно определить переполнение с
помощью следующего условия:
res = a + b;
if (a > res) || (b > res)
tail = 1;
else
tail = 0;
Т.к. сумма при переполнении будет меньше чем любое из чисел.
Подробная информация о списке рассылки Lab