C++ 如何制作一个程序,找到可以乘以某个浮点数的最小数,从而生成一个整数

C++ 如何制作一个程序,找到可以乘以某个浮点数的最小数,从而生成一个整数,c++,C++,我正在尝试创建一个程序,该程序将查找大于一个的最小整数,我可以将一个float乘以该整数并获得一个非整数。它应该输出乘以的值以及乘以的值。例如,如果用户输入2.8,则应返回5和14。这是我的代码,但它执行了很长时间,然后输出2和5.6。我做错了什么 #包括 #包括 int main() { 浮动a; int m=2; 浮点数c=0.00; 标准:cin>>a; 对于(int i=0;i

我正在尝试创建一个程序,该程序将查找大于一个的最小整数,我可以将一个
float
乘以该整数并获得一个非整数。它应该输出乘以的值以及乘以的值。例如,如果用户输入2.8,则应返回5和14。这是我的代码,但它执行了很长时间,然后输出2和5.6。我做错了什么

#包括
#包括
int main()
{
浮动a;
int m=2;
浮点数c=0.00;
标准:cin>>a;
对于(int i=0;i<9999999;i++){
c=a*m;
如果(c==(int)c){
打破
}
否则{
m+1;
}
}

std::cout即使在纠正错误之后,您所采用的暴力方法也需要很长时间。而且由于浮点不准确,它可能无法提供正确的结果。这里有一个更好的算法

将数字读取为字符串,而不是浮点数

从1开始计算分母。计算小数点右侧的位数,并将每个位数的分母乘以10

从字符串中删除小数点并将其转换为整数;这是您的分子。
2.8
的示例等于
28/10

取分子和分母的整数除以这个数。例如,28和10的GCD是2,所以你的分数现在是
14/5


简化分母是你的答案,分子是你乘法时的结果。

至少
m+1;
应该是
m+=1;
。你需要另一种策略(将输入读取为字符串并解析)为避免浮点计算中出现错误。
m+1;
您可能需要在编译器上提高警告级别。我希望类似“code”的消息不会产生任何效果。如下所示:您所做的错误是使用浮点,因为。如果将
.3
乘以
3
您可能实际上得不到1。结果可能看起来像1,但可能是t实际上不是1。因此,这种谜题只能用字符串数字运算和整数数学来解决。@SamVarshavchik:“如果你用.3乘以3,你可能得不到1”:这很好,因为.3乘以3等于.9。@SamVarshavchik另一个不好的例子,因为.25是一组小数字中的一个,可以用浮点数精确表示。1乘10更好。