【发布时间】:2014-07-16 20:56:53
【问题描述】:
此代码为除 1 以外的所有值输出 0。对于 1,它输出 1。看起来它正在执行 else 语句,因为“temp”值没有被打印(所有额外的打印语句已添加用于调试)。请帮忙。
#include<stdio.h>
#include<math.h>
int binarysum(long long int p);
int main(){
int r;
long long int x;
scanf("%lld",&x);
r=binarysum(x);
printf("%d",r);
return 0;
}
int binarysum(long long int p){
int result;
int j;
long long int check=pow(2,30),temp;
printf("%lld p %lld check\n",p,check);
if(p==0)
result=0;
else if(p==1)
result=1;
else{
for(j=31;j>=2;j--){
temp=check/2;
if(p>=temp){
printf("%lld temp\n",temp);
result=1+binarysum(p-temp);
break;
}
}
}
printf("%d result\n",result);
return result;
}
【问题讨论】:
-
首先想到的是在你的 for 循环中 temp 每次都是一样的,因为 check 永远不会改变。
-
你的包围是错误的;也就是说,您的 sn-p 中的
}比{多一个。我不确定您是否遗漏了代码,或者只是在您的printf("%d result\n, result);行之前放了太多}。无论哪种方式,这都是您应该正确缩进代码的原因。 -
不,他有正确数量的括号,每个 5 个。缩进让人很难分辨。
-
第五个
{在哪里?我看到main前面一个,binarysum前面一个,else前面一个,for前面一个。 -
有史以来最复杂的popcount计算方式?
标签: c debugging error-handling