0.5只要范围够大就应该输出T OO MANY吧?咋这么做还错了呢?
#include <bits/stdc++.h>
using namespace std;
int sborder,mborder;
double minn=397133.3428194;
double mb;
int mem,som;
int main(){
cin>>sborder>>mborder;
cin>>mb;
if(mb-(long long)(mb)==0){
cout<<mb<<"/1"<<endl;
return 0;
}
for(int i=1;i<=mborder;i++){
double p=mb*i;
if(p>sborder)break;
// if(i==819919)cout<<i<<" "<<p<<" ";
p-=(long long)(p);
p=min(p,abs(1-p));
// if(i==819919)cout<<"误差:"<<p<<endl;
if(p<minn){
// cout<<"GetMin\n";
// if((long long)(mb*i+0.5)%som==0&&i%mem==0){
// continue;
// }
minn=p;
mem=i;
som=(long long)(mb*i+0.5);
}//else if(p==minn){
// cout<<"TOO MANY!\n";
// return 0;
// }
}
long long pj=__gcd(som,mem);
cout<<som/pj<<"/"<<mem/pj<<endl;
return 0;
}
/*
1000000 1000000
0.994318485
*/
还有就是这代码,死过不去,我也没检查出什么问题,麻烦大佬看一看谢谢了QwQ