[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