Задача: сортировка рациональных дробей


Входные данные
Программа получает на вход n дробей: сначала задается число n , 
потом идет n строк, в каждой из которых записана одна дробь. 
Дробь записана в виде a/b , где a и b — натуральные числа.

Выходные данные
Программа должна вывести список этих дробей в порядке неубывания. 
Если в списке есть две равные дроби то раньше выводится дробь, у которой меньше числитель.
ПРИМЕР
ввод
3
4/2
2/6
1/2
вывод
2/6
1/2
4/2

Вот моё решение , но оно не проходит тесты и идей почему - нет

struct Point {
    string a;
    double b;
};

struct Point {
    string a;
    double b;
};

bool comp(Point a , Point b) {
    if(a.b == b.b) {
            ll cur1 = 0;
            ll cur2 = 0;
        for(int i = 0; i < a.a.size();i++) {
            if(a.a[i] == '/') {
                break;
            }
            cur1+= (a.a[i]-48)*10;
        }
        for(int i =0 ; i < b.a.size();i++) {
            if(b.a[i] == '/') {
                break;
            }
            cur2+= (b.a[i]-48)*10;
        }
        return cur1 < cur2;
    }
    return a.b < b.b;
}
int main() {
    int n;
    cin >> n;
    vector<Point> a(n);
    for(int i =0 ;i < n;i++) {
        string s;
         int f,l;
        scanf("%d/%d" , &f , &l);
        s = to_string(f) +"/" + to_string(l);
        a[i].a = s;
        double ff = f;
        double l2 = l;
        double res = ff/l2;
        a[i].b = res;
    }
    sort(a.begin(),a.end(),comp);

    for(auto x : a) {
        cout << x.a << endl;
    }


Ответы (1 шт):

Автор решения: Harry

Ну попробуйте это:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct ratio
{
    int q,d;
};

bool operator < (const ratio& a, const ratio& b)
{
    int q = a.q*b.d, d = a.d*b.q;
    if (q < d) return true;
    if (q > d) return false;
    return a.d < b.d;
}

istream& operator >> (istream& is, ratio& r)
{
    char c;
    is >> r.q >> c >> r.d;
    return is;
};

int main()
{
    vector<ratio> v;
    int N;
    cin >> N;
    for(int i = 0; i < N; ++i)
    {
        ratio r;
        cin >> r;
        v.push_back(r);
    }
    sort(v.begin(),v.end());
    for(auto r: v)
        cout << r.q << "/" << r.d << endl;
}
→ Ссылка