poj 1650 Integer Approximation

Integer Approximation
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5326   Accepted: 1750

Description

The FORTH programming language does not support floating-point arithmetic at all. Its author, Chuck Moore, maintains that floating-point calculations are too slow and most of the time can be emulated by integers with proper scaling. For example, to calculate the area of the circle with the radius R he suggests to use formula like R * R * 355 / 113, which is in fact surprisingly accurate. The value of 355 / 113 ≈ 3.141593 is approximating the value of PI with the absolute error of only about 2*10-7. You are to find the best integer approximation of a given floating-point number A within a given integer limit L. That is, to find such two integers N and D (1 <= N, D <= L) that the value of absolute error |A - N / D| is minimal.

Input

The first line of input contains a floating-point number A (0.1 <= A < 10) with the precision of up to 15 decimal digits. The second line contains the integer limit L. (1 <= L <= 100000).

Output

Output file must contain two integers, N and D, separated by space.

Sample Input

3.14159265358979
10000

Sample Output

355 113

Source

Northeastern Europe 2001, Far-Eastern Subregion

分析:

枚举

 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     double a,min=100005;
 5     int n;
 6     cin>>a>>n;
 7     double b,c;
 8     c=b=1;
 9     int p=1,q=1;
10     while(c<=n&&b<=n){
11          if(c/b>a){
12              if(c/b-a<min){
13                  min=c/b-a;
14                  p=c;
15                  q=b;
16              }
17              b++;
18          }
19          else{
20              if(a-c/b<min){
21                  min=a-c/b;
22                  p=c;
23                  q=b;
24              }
25              c++;
26          }    
27     }
28     cout<<p<<" "<<q<<endl;
29     return 0;
30 }
原文地址:https://www.cnblogs.com/Deribs4/p/4282958.html