[英]Difference between x * 0.1 and x / 10?
我是一名高中生,不久前我看到乘法比除法好。 从那以后,在没有任何证据证明它是真是假的情况下,我现在也不知道如何自己找到它,我试图修改我的代码以适应那个稍微好一点的时间。
这是一个问题,我想使用递归找到数字中的最大数字。
这个正在工作。
#include <iostream>
using namespace std;
int minn = 9;
int digit(int n)
{
if(minn > n % 10)
minn = n % 10;
if(!(n / 10))
return minn;
else
return digit(n / 10);
}
int main()
{
int x;
cin >> x;
cout << digit(x);
return 0;
}
但这不起作用。
#include <iostream>
using namespace std;
int minn = 9;
int digit(int n)
{
if(minn > n % 10)
minn = n % 10;
if(!(n * 0.1))
return minn;
else
return digit(n / 10);
}
int main()
{
int x;
cin >> x;
cout << digit(x);
return 0;
}
唯一的区别是损坏的一个使用if(.(n * 0.1))
而不是if(!(n / 10))
。
有人可以为我或任何寻求帮助的人澄清一下 x * 0.1 和 x / 10 有什么区别?
感谢大家点击问题并尝试提供帮助!
0.1
是双精度型, 10
是 integer 型。
将两个整数相除时,例如n / 10
,您将得到 integer 除法(例如6/10
将等于0
)。
使用6 * 0.1
时,您的检查将有所不同,因为这将等于0.6
。
n *.1
产生浮点结果。 因此, 3 *.1
产生.3
的结果,这绝对不是 0。
另一方面,3/10 为 0。这就是 integer 除法在 C++ 中的工作方式。
有人可以为我或任何寻求帮助的人澄清一下 x * 0.1 和 x / 10 有什么区别?
差异非常显着。 在第一种情况下,您在第二个 integer 除法中使用浮点乘法。 所以第一个if()
会在 n == 0 时发生,而第二个会在 n < 10 时发生。
if( !(n*0.1) ) // for if to work result of n * 0.1 must be equal 0 which only happens when n == 0
if( !(n/10) ) // for if to work result of n / 10 must be equal to 0 which happens when abs(n) < 10 (including 0)
您将 x 定义为int
, x*0.1
使用浮点算术,而x/10
使用 integer 算术
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.