Лучше через вычитания деление выполнять не последовательным вычитанием делителя, а вычитанием убывающих степеней делителя.
Например, y=x/10^c (где с = 1, 2, 3, ..) Представим x=x9*10^9+x8*10^8+..x1*10+x0, тогда y=y9*10^(9-c)+y8*10^(8-1)+..y1*10^(1-c)+y0*10^(-c) Естественно, все, что меньше единицы в частном нам не нужно, то есть вычисления с y0 откидываем для 10, y0 и y1 откидываем для 100. И т.д. Собственно, алгоритм будет лишен делений и умножений, будут использоваться только вычитания и сложения.
Делим на 10: while (x-10^9 > 0) y+=10^8 // ищем y9 while (x-10^8 > 0) y+=10^7 // ищем y8 .. while (x-10 > 0) y+=1 // ищем y1 Готово.
З.Ы. Основанием степени не обязательно должно быть 10 ))) З.З.Ы В тяжелых случаях можно делить приблизительно, умножая на дробь со знаменателем в виде 2^n, близкую к 1/10 (например 13/128)
|