【发布时间】:2024-01-06 06:33:01
【问题描述】:
对于某些值,例如 10 的代码工作正常,输出为 1010,这是正确的,但对于 20、50 或 51,输出是错误的,或者至少在我看来是这样。 请帮忙!
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
cin >> n;
int ans = 0;
int i = 0;
while (n != 0)
{
int bit = n & 1;
ans = (bit * pow(10, i)) + ans;
n = n >> 1;
i++;
}
cout << " Answer is " << ans << endl;
}
【问题讨论】:
-
“对于 20 或 50 或 51,输出是错误的,或者至少在我看来是这样的” 那么在这些情况下输出是什么是?
-
只要记住你所有的数字都已经以二进制形式存储在内存中(所以位模式就在那里)。所以将位 (2^n) 与 (10^n) 结合起来有点奇怪。在 pow 之上是浮点函数。所以我认为你需要重新考虑你的代码。你可能想看看这里:learncpp.com/cpp-tutorial/bitwise-operators
-
我真的不知道这是否只是我的编译器的问题,但我尝试将 ans 变量的数据类型从(int 改为 float),它工作得非常好,真的不知道原因对于我的编译器二进制值 6 、 20 、 51 分别为 109、 10098 、 11010 的 ans 是 int 数据类型的情况,这里的答案是 109、10098、11010