繁体   English   中英

x * 0.1 和 x / 10 之间的差异?

[英]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 定义为intx*0.1使用浮点算术,而x/10使用 integer 算术

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM