代码:
#include <iostream> using namespace std; void main() { int a = 12; int num = 0; while(1) { if(a!=0) { num++; a = a & (a-1); } else break; } cout<<num<<endl; }
给定另一个正整数A、B。问你把A变为B需要改变多少为?
#include <iostream> #include <windows.h> using namespace std; void main() { int a = 15; int b = 100; int num = 0; int c = 1; while(c) { if( (a%2) != (b%2) ) { num++; } a = a/2; b = b/2; c = a>b?a:b; } cout<<num<<endl; }
在做上一道题目时,我犯了一个错误,但是编译确实正确的,代码如下:
void main() { int a = 15; int b = 100; int num = 0; int c = 1; while(c) { if( (a%2) != (b%2) ) { num++; } a = a/2; b = b/2; int c = a>b?a:b; } cout<<num<<endl; }
结果却是死循环。
原因是局部变量全局变量的结果。while(c)中的C是全局变量1,一旦进入while循环,就会被局部变量覆盖,因此变为了一个死循环。