Freak_Van
2015-04-16 15:07
采纳率: 76.5%
浏览 5.9k
已采纳

c语言题目二进制加法求指教

由键盘输入两个二进制正整数(均不超过2的31次方),计算输出它们的和(结果同样以二进制表示)。注:本题以字符串方式读取数据时,
务必使用scanf("%s", ....)的方式

输入格式

共两行,一行一个二进制正整数(务必使用scanf("%s", ....)的方式,以确保读入的串末尾不会含有空格及其它特殊字符)
输出格式

二进制形式的和
输入样例

1101
10
输出样例

1111

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • Heart09 2015-04-17 01:46
    已采纳

    1.首先不超过2的31次方,则只需要32位就够了,不需要那么大的数组。
    2.x,y是int数组,'\0'就是0,怎么能作为x,y的结束
    3.你不是一开始就算出来x,y的长度了吗,l1,l2,通过这个长度不就知道相加处理多少位了,
    而且哪个长,最后再单独处理哪个不就行了。
    或者在一开始,就把长的放在x中,短的放在y中,最后总是处理x。

    已采纳该答案
    打赏 评论
  • danielinbiti 2015-04-16 15:31
     '\0'的ascii是0,x数组和y数组是整型,如果输入001这种,那么x[i] != '\0'是false,两者的值是一致的。
     把x[10000]={-1} y[10000]={-1},通过是否等于-1进行判断
    
    5 打赏 评论
  • Freak_Van 2015-04-16 15:14

    #include
    #include
    int main()
    {
    char a[10000], b[10000];//输入两个字符串
    int x[10000], l1, y[10000], l2, i, j, sum[10000] = {0};
    scanf("%s%s", &a, &b);
    l1 = strlen(a);
    l2 = strlen(b);
    for(j = 0, i = l1-1; i >= 0; i--, j++)
    x[j] = a[i] - '0';//逆序存放,将char型变成整型
    for(j = 0, i = l2-1; i >= 0; i--, j++)
    y[j] = b[i] - '0';//逆序存放,将char型变成整型
    for(i = 0; x[i] != '\0' && y[i] != '\0'; i++)//相加到其中一个数组完为止
    {

    if(sum[i] + x[i] + y[i] >= 2)//相加后判断是否要进位,存放在sum数组中
    {
    sum[i] = (sum[i] + x[i] + y[i]) % 2;
    sum[i+1] = 1;
    }
    else
    {
    sum[i] = sum[i] + x[i] + y[i];
    sum[i+1] = 0;
    }
    }
    if(x[i] != '\0')//剩下另外一个没加完的数组继续加到sum中
    {
    for(; x[i] != '\0'; i++)
    {
    if(sum[i] + x[i] == 2)
    {
    sum[i] = 0;
    sum[i+1] = 1;
    }
    else
    {
    sum[i] = sum[i] + x[i];
    sum[i+1] = 0;
    }
    }
    }
    else
    {
    for(; y[i] != '\0'; i++)
    {
    if(sum[i] + y[i] == 2)
    {
    sum[i] = 0;
    sum[i+1] = 1;
    }
    else
    {
    sum[i] = sum[i] + y[i];
    sum[i+1] = 0;
    }
    }
    }
    if(!sum[i])//sum[i]是0的话i-1;
    i--;
    for(; i >= 0; i--)
    printf("%d", sum[i]);//逆序输出sum
    return 0;
    }
    帮忙看下哪里错了

    1 打赏 评论
  • threenewbee 2015-04-16 15:49

    最简单可靠的办法就是转换成10进制相加再转回去。

    打赏 评论

相关推荐 更多相似问题