考试时我怕此题爆精度,所以没用 double 类型,用的乘法,结果 WA 了 3 个点,求助。
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
int a,b,l,ans1,minn1=1e13,ans2,minn2=1e13,m,temp,temp1,temp2,x,y;
int _min(int x,int y){
return x<y?x:y;
}
bool huzhi(int x,int y){
if(x%y==0 || y%x==0)return false;
for(int i=2;i*i<=_min(x,y);i++){
if(x%i==0 && y%i==0)return false;
}
return true;
}
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
int lcm(int a,int b){
return a*b/gcd(a,b);
}
void bijiao(int i,int j,int a,int b,int n,int m){
int t=i-a;
if(minn1==1e13 && minn2==1e13){
ans1=n;
ans2=m;
minn1=t;
minn2=j;
return ;
}
if(t*minn2<j*minn1){
ans1=n;
ans2=m;
minn1=t;
minn2=j;
}
return ;
}
signed main(){
//freopen("ratio.in","r",stdin);
//freopen("ratio.out","w",stdout);
cin>>a>>b>>l;
for(int i=1;i<=l;i++){
for(int j=1;j<=l;j++){
if(i*b>=a*j){
if(huzhi(i,j)){
temp=lcm(j,b);
temp1=temp/j;
temp2=temp/b;
x=i*temp1;
y=a*temp2;
bijiao(x,temp,y,temp,i,j);
}
}
}
}
cout<<ans1<<' '<<ans2;
return 0;
}
rt.