我正在创建分数结构数组排序程序。
一点点(略低于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
这个程序缺少什么?好长吗?还是int? 帮帮我...
答案 0 :(得分:0)
在比较中试试这个
return val > 0 ? +1 : -1;
当你从比较中返回long long int
转换为int
时,我预计你会失去精确度。