-1

我正在创建分数结构数组排序程序。

一个小数字(略低于 1000)我的程序有很好的答案

但是大数字(略超过 100000)我的程序有错误的答案

有什么问题?

这是我的源和输入数据

#include <cstdlib>
#include <iostream>
using namespace std;

struct Fraction {
  long long denominator;
  long long numerator;
};

int compare(const void *a, const void *b) {
  const struct Fraction *x = (Fraction *)a;
  const struct Fraction *y = (Fraction *)b;

  long long val = x->numerator * y->denominator - x->denominator * y->numerator;

  if (val == 0) {
    return x->numerator - y->numerator > 0 ? 1 : -1;
  } else {
    return val;
  }
}
Fraction setOfData[100000];
int numOfData, numOfK;
int main() {
  cin >> numOfData >> numOfK;
  for (int i = 0; i < numOfData; ++i) {
    long long denominator;
    long long numerator;

    cin >> numerator >> denominator;
    setOfData[i].numerator = numerator;
    setOfData[i].denominator = denominator;
  }

  qsort(setOfData, numOfData, sizeof(Fraction), compare);
  cout<< setOfData[numOfK - 1].numerator << ' ' << setOfData[numOfK - 1].denominator;

  return 0;
}

这是我的输入数据

input data
7 4
56783 9765493
56786 9765492
56788 9765491
8888888 9765464
56687 9765395
56789 9765497
56785 9765496

分拣标准不降低

输入数据我的程序打印

8888888 9765464
56687 9765395
56783 9765493
56785 9765496
56786 9765492
56788 9765491
56789 9765497

这个程序有什么不足?长吗?还是整数?请帮帮我...

4

1 回答 1

0

试试这个比较

return val > 0 ? +1 : -1;

当您从比较返回时,我希望您在long long int转换为时失去精度。int

于 2013-09-12T17:11:24.350 回答