|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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;
}
这样修改后,你应该能够正确地输出结果了。
|
|