1-й и 2-й вариант - полностью абсурдные. Тут возможно только 2 результата : 0*4500=0 и 1*4500=4500
Почти по той же причине неприемлем и 4-й вариант. Компилятор за вас скобки ставить не будет (..*100). Хотя и это плохой вариант.
Ближе всего к истине 3-й вариант. Остаётся уговорить компилятор на преобразование типов и добавить "+0.5" Если вам трудно уговорить - создайте промежуточную переменную : long a; a=p2-p4; a*=4500; a/=p1-p3; Это никак не скажется на эффективности кода, т.к. компилятор всё равно сделал бы тоже самое.