“cnt + = num%2;”和“if(num%2)++ cnt;”之间的区别 我成功地计算了二进制数中的'1'的数量。 但似乎做同样事情的一条线会产生不同的结果。
全局变量“cnt = 0”被声明为代码的顶部
#include<stdio.h>
int cnt=0;
//and the recursive function which counts '1' is here
int one( int num ) {
if (num < 2)
{
cnt += num;
return cnt ; //here, escape and return cnt to main.
}
else
{
one(num / 2);
cnt += num % 2; //according to the remainders cnt++ AND THIS IS THE THE QUESTION CORE
}
}
void main() {
int num;
scanf("%d", &num);
cnt=one(num); //call recursive function
printf("%d", cnt); //and here, i want to watch the [RESULT]
}//main
[结果]
当我使用“cnt += num % 2;
”打印正确答案时
但另一个看似相同的代码“if (num % 2) ++cnt;
”打印错误答案。
num%2必须为0或1.因此它将“1”添加到cnt。但第二个代码不起作用。
我错过了哪一点?
答案 0 :(得分:0)
除了return
中缺少else branch
之外,您使用全局变量cnt
的方式不合适(这些都是您错过的)。以下代码效果很好:
int one(int num) {
if (num < 2) {
return num;
} else {
return (num % 2) + one(num / 2);
}
}
希望有所帮助。