Свопа делители и умножать, как в следующем compare
функции:
#include <stdio.h>
// -ve if dividend1 ÷ divisor1 is less than dividend2 ÷ divisor2
// zero if dividend1 ÷ divisor1 is equal to dividend2 ÷ divisor2
// +ve if dividend1 ÷ divisor1 is greater than dividend2 ÷ divisor2
int compare(int dividend1, int divisor1, int dividend2, int divisor2) {
int product1 = dividend1 * divisor2;
int product2 = dividend2 * divisor1;
return product1-product2;
}
void test(int dividend1, int divisor1, int dividend2, int divisor2) {
int comparison = compare(dividend1, divisor1, dividend2, divisor2);
char const* relation = (comparison < 0) ? "less than" : (comparison > 0) ? "greater than" : "equal to";
printf("%d/%d is %s %d/%d.\n", dividend1, divisor1, relation, dividend2, divisor2);
}
int main() {
test(705, 239, 720, 235);
}
Примечания:
- Ни фактор больше, если эти соотношения равны.
- Это отличие от сравнения
dividend1/divisor1
и divident2/divisor2
, поскольку целочисленное деление усекает частное. Например, фактор всегда равен нулю, когда делитель больше дивиденда.
- Результат не определен, если какая-либо из операций в переполнении
compare
.