2 neqrhk NeQrhk 于 2015.07.17 07:03 提问

一个c语言的简单acm问题,求两个二进制数有多少位不同,输入的是十进制数.

include
int main()
{
int n,p=0,k,m,t;
int a[50];
int b[50];
int c[50];
int d[50];
int i=0,j,u,z,w,q,e,s;
int r;
int count=0;
scanf("%d",&r);
while(r--){
scanf("%d%d",&n,&m);
while(n>0)
{
j=n%2;
n=n/2;
a[i++]=j;
}
while(m>0)
{
k=m%2;
m=m/2;
b[p++]=k;
}
if(i>p){
for(q=i-1,u=0;q>=0;q--,u++)
c[q]=a[u];
for(z=p+(i-p)-1,u=0;z>=i-p;u++,z--)//先从右往左填充d数组,前面留下的空位置置0
d[z]=b[u];
for(e=0;e d[e]=0;
for(w=0;w if(c[w]!=d[w])
count++;
}
else if(i

{
for(q=p-1,u=0;q>=0;q--,u++)
c[q]=b[u];
for(z=i+(p-i)-1,u=0;z>=p-i;u++,z--)//同上
d[z]=a[u];
for(e=0;e<p-i;e++)
d[e]=0;
for(w=0;w<p;w++)
if(c[w]!=d[w])
count++;
}
else{
for(q=0;q<i;q++)
if(a[q]!=b[q])
count++;
}
printf("%d",count);
}
return 0;
}

http://swun.openjudge.cn/practice/1009/题目在这里
我的代码出来结果一样怎么会没办法AC

7个回答

leizhang250
leizhang250   2015.07.17 08:12

看看。最后一句没明白啊?

91program
91program   Ds   Rxr 2015.07.17 08:35

两个二进制数有多少位,无论输入的是 10 进制,还是 16进制,如果输入的数值是正确的,对程序来说是一样的处理。
但输入 16 进制时,需要自己处理吧,否则不可能是正确的数值。

lm_whales
lm_whales   Rxr 2015.07.17 10:52

你要贴出题目,你这里信息太笼统了

qq517634644
qq517634644   2015.07.17 13:24

代码错位了 ,重发吧。。。

CSDNXIAOD
CSDNXIAOD   2015.07.19 05:32

C/C++求一个整数的二进制中1的个数
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

maiidamai
maiidamai 咬你→_→
2 年多之前 回复
zhjandcs
zhjandcs   2015.07.21 17:46

没有用代码格式,你的代码漏掉了。不知道你 外层的while(r--) 干嘛用的。你说没有通过的话,你考虑了输入是负数的情况了没有?
我觉得你直接把这输入的两个数异或,然后看异或出来的数的二进制中1的个数应该简单些。

NeQrhk
NeQrhk   2015.07.21 18:27

#include
#include
int main()
{
int n,p,k,m,t;
int a[50];
int b[50];
int c[50];
int d[50];
int i,j,u,z,w,q,e,s;
int r;
int count;
scanf("%d",&r);
while(r--){
count=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(a));
i=0;p=0;
scanf("%d%d",&n,&m);
while(n>0)
{
j=n%2;
n=n/2;
a[i++]=j;
}
while(m>0)
{
k=m%2;
m=m/2;
b[p++]=k;
}
if(i>p){
for(q=i-1,u=0;q>=0;q--,u++)
c[q]=a[u];
for(z=p+(i-p)-1,u=0;z>=i-p;u++,z--)

d[z]=b[u];
for(e=0;e d[e]=0;
for(w=0;w if(c[w]!=d[w])
count++;
}
else if(i

{
for(q=p-1,u=0;q>=0;q--,u++)
c[q]=b[u];
for(z=i+(p-i)-1,u=0;z>=p-i;u++,z--)
d[z]=a[u];
for(e=0;e<p-i;e++)
d[e]=0;
for(w=0;w<p;w++)
if(c[w]!=d[w])
count++;
}
else{
for(q=0;q<i;q++)
if(a[q]!=b[q])
count++;
}
printf("%d\n",count);
}
return 0;
}

修改以后可以通过了,也谢谢各位的回复

Csdn user default icon
上传中...
上传图片
插入图片