1 solutions
-
0
C++ :
#include<stdio.h> #include<math.h> int main() { int i,a,b,x,y,m,n,q; double p,min=1; scanf("%d%d",&a,&b); for(i=2;i<=32767;i++) { p=(double)i*a/b; q=(int)p; if(fabs(p-q)<=1e-6) x=q-1; else if(p-q<=q+1-p) x=q; else x=q+1; //四舍五入,加0.5会出现精度问题 y=i; if(fabs((double)x/y-(double)a/b)<min) { min=fabs((double)x/y-(double)a/b); m=x; n=y; } } for(i=2;i<=32767;i++) if(m%i==0&&n%i==0) { m/=i; n/=i; } printf("%d %d",m,n); return 0; }
- 1
Information
- ID
- 10131
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By