我是一名高中学生,之前看到过一个说法,即乘法比除法更好。自那以后,我试图修改我的代码,使其稍微更快,但并没有找到任何证明它是否正确的证据,也不知道如何自己查找证据。
这里有一个问题,我想用递归来寻找数字中最大的数字。
这个代码可以正常运行。
#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 之间的区别吗?
感谢所有点击问题并尝试帮助的人!
x * 0.1
这样的调用中发生了什么,请查看算术运算符页面上的“转换”部分,并记住10
是一个int
,而0.1
是一个double
。 - Nathan Pierson0.1
is a floating point number andn * 0.1
becomes a floating number too. First problem with it is that it doesn't do what you want ifn == 123
, thenn * 0.1
is12.3
, not 3. The second problem is that floating numbers are not precise, you get a small small numeric error, so it's not actually12.3
, but maybe12.29999999999
- Alexey LarionovDigit_Value = text[x] - '0'
。在我看来,比余数和除法运算要简单得多。 - Thomas Matthews