本题就是比较两个分数的大小,毫无压力的签到水题,x : a 与 y : b,比较内项积与外项积即可。

因为数比较大,可能会爆栈,所以个人感觉python和java大数比较好用,亲测该题python代码要优于java大数。


题目描述

链接:https://ac.nowcoder.com/acm/contest/881/J
来源:牛客网
Bobo has two fractions xaxa and ybyb. He wants to compare them. Find the result.

输入描述:

The input consists of several test cases and is terminated by end-of-file.
Each test case contains four integers x, a, y, b.
* 0x,y10180≤x,y≤1018 * 1a,b1091≤a,b≤109 * There are at most 105105 test cases.

输出描述:

For each test case, print `=` if xa=ybxa=yb. Print `<` if xa<ybxa<yb. Print `>` otherwise.
示例1

输入

复制
1 2 1 1
1 1 1 2
1 1 1 1

输出

复制
<
>
=

python代码

while True:
    try:
        s = input()
        x, a, y, b = map(int, s.split(" "))
        ans1 = x * b
        ans2 = y * a
        if ans1 < ans2:
            print("<")
        elif ans1 == ans2:
            print("=")
        else:
            print(">")
    except EOFError:
        break

java代码

import java.util.Scanner;
import java.math.BigInteger;
public class Main {
    public static void main(String args[]) {
    Scanner cin = new Scanner(System.in); 
        while(cin.hasNext()) {
        BigInteger a, b, c, d;
        a = cin.nextBigInteger();
        b = cin.nextBigInteger();
        c = cin.nextBigInteger();
        d = cin.nextBigInteger();
        a = a.multiply(d);
        b = b.multiply(c);
        if(a.compareTo(b) > 0) {
        System.out.println(">");
        }
        else if(a.compareTo(b) == 0) {
        System.out.println("=");
        }
        else{
        System.out.println("<");
        }
     } 
    cin.close();
   }
}

最后附上本题的标程(大神的标准答案):

#include <bits/stdc++.h>

static std::pair<uint64_t, uint64_t> fcompare(uint64_t x, uint32_t a,
                                              uint64_t y, uint32_t b) {
  uint64_t p = x / a; // p <= (x / a) < p + 1
  uint64_t q = y / b; // q <= (y / b) < q + 1
  if (p != q) {
    return {p, q};
  }
  x %= a;
  y %= b;
  return {x * b, y * a};
}

int main() {
  std::ios::sync_with_stdio(false);
  uint64_t x, y;
  uint32_t a, b;
  while (std::cin >> x >> a >> y >> b) {
    auto result = fcompare(x, a, y, b);
    if (result.first == result.second) {
      puts("=");
    } else if (result.first < result.second) {
      puts("<");
    } else {
      puts(">");
    }
  }
}

本人菜鸟一枚,还望大佬们多多指教。