为什么输出是空的啊
#include <iostream>using namespace std;
int num(int n1, int n2)
{
int count = 0;
while (n1 != 0 or n2 != 0)
{
if ((n1 & 1) != (n2 & 1))
{
count = count + 1;
}
n1 >> 1;
n2 >> 1;
}
return count;
}
int main()
{
int n;
cin >> n;
cin.ignore();
for (int i = 1; i <= n; i++)
{
int a, b;
cin >> a >> b;
int num1 = num(a, b);
cout << num1 << endl;
}
return 0;
} 问题出在两个地方:
1. 在while循环中,你使用了位运算符 >> 来右移n1和n2的值,但是你没有将右移后的值重新赋值给n1和n2。所以,n1和n2的值始终不变,导致了无限循环。你需要将 n1 >> 1; 和 n2 >> 1; 改为 n1 = n1 >> 1; 和 n2 = n2 >> 1; 。
2. 在使用 cin.ignore(); 时,你没有指定参数,导致它会忽略掉输入的第一个字符。你可以将其改为 cin.ignore(numeric_limits<streamsize>::max(), '\n'); ,这样它会忽略掉输入的一整行。
下面是修改后的代码:
#include <iostream>
#include <limits>
using namespace std;
int num(int n1, int n2)
{
int count = 0;
while (n1 != 0 or n2 != 0)
{
if ((n1 & 1) != (n2 & 1))
{
count = count + 1;
}
n1 = n1 >> 1;
n2 = n2 >> 1;
}
return count;
}
int main()
{
int n;
cin >> n;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
for (int i = 1; i <= n; i++)
{
int a, b;
cin >> a >> b;
int num1 = num(a, b);
cout << num1 << endl;
}
return 0;
}
这样修改后,你应该能够正确地输出结果了。 为什么输出是空的啊 C\C++交流
这段代码是一个C++程序,根据输入的n值,计算n对整数a和b的二进制表示中有多少位不同。程序使用了一个名为num的函数来实现计算,该函数使用了位运算来逐位比较两个数的二进制表示。
然而,代码中存在一个问题,即在进行右移操作时,没有将结果赋值给变量n1和n2,导致循环无法终止,从而导致输出为空。
为了解决这个问题,需要在右移操作后将结果赋值给相应的变量,即将"n1 >> 1;"和"n2 >> 1;"修改为"n1 = n1 >> 1;"和"n2 = n2 >> 1;"。
下面是修改后的代码示例:
#include <iostream>
using namespace std;
int num(int n1, int n2) {
int count = 0;
while (n1 != 0 or n2 != 0) {
if ((n1 & 1) != (n2 & 1)) {
count = count + 1;
}
n1 = n1 >> 1;
n2 = n2 >> 1;
}
return count;
}
int main() {
int n;
cin >> n;
cin.ignore();
for (int i = 1; i <= n; i++) {
int a, b;
cin >> a >> b;
int num1 = num(a, b);
cout << num1 << endl;
}
return 0;
}
希望能够解答您的问题。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]