lilejin322 发表于 2019-3-30 19:27:45

二进制加法问题的字符串“手工”模拟代码小白犯错

Question:输入一个长度为32位的二进制数字,请你下一行打印其+1后的二进制加法结果。
例:
输入:
00000000000000000000000000000000
输出:
00000000000000000000000000000001
不知道利用字符串我的“递归”错在了哪里,应该是语法的问题,编程小白实在是太渣了{:10_266:}
#include <stdio.h>

char a;                //32位的字符串
int i;                     //处理字符串用的
void plus(a)            //对字符串进行模拟加法运算
{
        if (a=='0')         //该位置的字符为0,进行加1操作
        {
                a = '1';
        }//if
        else                   //该位置的字符为1,递归对下一“高位”进行加1操作
        {
                plus(a);
        }//else
}//plus

int main()
{
        while (scanf_s("%s", a, 32) != EOF)
        {
                i = 31;         //每次循环输入,将i置为31,从最“低”位开始模拟二进制加法操作
                plus(a);
                printf("%s",a);   //输出结果
        }//while
        return 0;
}//main

jackz007 发表于 2019-3-31 00:54:57

本帖最后由 jackz007 于 2019-3-31 00:57 编辑

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * dec2bin(char * bin , const int n , const int m)
{
      char c                                                                     ;
      int d , k                                                                  ;      

      if(n > 0) {
                c = n % 2                                                          ;
                if(c) c = '1'                                                      ;
                else c = '0'                                                       ;
                dec2bin(bin , n / 2 , m + 1)                                       ;
                for(k = 0 ; k < 32 && bin ; k ++)                               ;
                bin = c                                                      ;
                bin = '\0'                                                      ;
      } else {
                bin = '\0'                                                      ;
      }
      if(! m) {
                d = strlen(bin)                                                    ;
                if(d < 32) {
                        for(k = 0 ; k < d ; k ++) bin = bin ;
                        for(k = 0 ; k < 32 - d ; k ++) bin = '0'                ;
                        bin = '\0'                                             ;
                }
      }
      return bin                                                               ;
}

void plus(char b[])
{
      int k                        ;

      k = 32                         ;
      do {
                if(b == '1') {
                        b = '0' ;
                } else {
                        b = '1' ;
                        break          ;
                }
                k --                   ;
      } while(k > 0)               ;
}


运行实况:
C:\Bin\Exercise\C>plus2
2147483647
2147483647
01111111111111111111111111111111
10000000000000000000000000000000

C:\Bin\Exercise\C>
页: [1]
查看完整版本: 二进制加法问题的字符串“手工”模拟代码小白犯错