整数B,对于一个小于1大于0的浮点数A,怎么求出最小的数B,使得A*B的结果是一个整数(小数部分为0)

求一个整数B,对于一个小于1大于0的浮点数A,如何求出最小的数B,使得A*B的结果是一个整数(小数部分为0)
如题,求一个整数B,对于一个小于1大于0的浮点数A(如0.625),如何求出最小的数B,使得A*B的结果是一个整数,
举例:
A=0.625,那么A*1000=625,1000符合条件;A*8=5,8也符号条件,那么B应该为8。
A也可能等于一个其他的浮点数,如0.005137。

求解,谢谢

------解决方案--------------------
设此数 A = 0.a1 a2 a3 a4... aN.

那么 A * 10^N = a1 a2 a3 a4...aN.

显然B = 10^N,符合。
又因为要使得B最小,那么也就是说从B可以约掉 B 与 a1 a2 a3 a4...aN的最大公约数。

又因为10^N的质因子只有2跟5.
所以很简单,如果 a1 a2 ...aN这个数有因子2跟5,那么就从10^N中约去相应个数的2跟5,得到的结果便是。

------解决方案--------------------
这个题目跟计算机的浮点数表示精度有关,计算机的浮点数表示精度越高,你的输入的浮点数允许出现连续0的个数就可以越大。
这个程序在一定精度范围内可以满足你的要求。
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#define PRECISION_INPUT  0.00000001//这个精度是你的输入的浮点数的精度
#define PRECISION_OFFSET 0.00000000000000009//这个精度是计算机表示的浮点数的精度

int foo(double des)
{
    double des_copy = des + PRECISION_OFFSET;
    int power = 1;
    int des_copy_int = des_copy;    
    while(des_copy - des_copy_int > PRECISION_INPUT)
    {
        power *= 10;
        des_copy *= 10;
        des_copy_int = des_copy;
    }

    while(des_copy_int%2 == 0 && power%2 == 0)
    {
        des_copy_int /= 2;
        power /= 2;        
    }
    while(des_copy_int%5 == 0 && power%5 == 0)
    {
        des_copy_int /= 5;
        power /= 5;        
    }

    return power;    
}

void main()
{
    printf("%d\n", foo(0.6200051));
}