二进制加法问题的字符串“手工”模拟代码小白犯错
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: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]