哈哈,解决了,数组长度50,实际只用了前32位,所以不是N-len,循环条件应该是N-18-len,i<N-18,i++
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50
//十进制转二进制
char tobinary(int n,int len)
{
int i=0;
char arr[N];
itoa(n,arr,2);
//itoa()函数作用是将数字n转化为二进制字符串存入数组arr中,第三个参数2可以是其他进制,此函数windows特有,不能用于其他平台,没有可移植性
// printf("%s\n",arr);
for(i=N-18-len;i<N-18;i++)
printf("%c",arr[i]);
}
//01字符串转二进制数
int str_binary(char str[])
{
int i,n=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]=='1' || str[i]=='0') //判断第i个字符是否是'1'或'0',如果是执行下面语句
{
n<<=1; //把已经得到的n值左移1位,等同于乘以2
n+=str[i]-'0'; //字符'1'减去'0'就等于1,字符'0'减去'0'当然是0,所以这句的意思是把第i个字符所对应的数加到n上去
}
else
{
printf("不是二进制数\n");
return 1;
}
}
// printf("%d\n",n);
return n;
// tobinary(n);
}
int main()
{
char a[N],b[N];
int na=0,nb=0,nc=0,str_length=0;
gets(a);
gets(b);
str_length=strlen(a);
// printf("str_length=%d\n",str_length);
na=str_binary(a);
nb=str_binary(b);
nc=~(na^nb);
// printf("%d\n",nc);
tobinary(nc,str_length);
printf("\n");
return 0;
}
[此贴子已经被作者于2016-6-1 15:37编辑过]