我这个代码错在哪里了?

img


img


可以帮忙看一下我这个代码错在哪里了吗,感觉我思路是对的呀,就是十转二之后进行逆序输出

修改如下,供参考:

img

img

其实用不着像你那么做,你可以看一下这个,应该没问题。

#include <stdio.h>
void DecToBin(int n, char s[]){
    int i = 0;
    while(n > 0){
        if (n % 2 == 1){
            s[i] = 1;
            i++;
        } else {
            s[i] = 0;
            i++;
        }
        n /= 2;
    }
    for (int j = i - 1; j >= 0; j--) printf("%d", s[j]);
}
int main(){
    int n;
    char s[35];
    scanf("%d", &n);
    DecToBin(n, s);
    return 0;
}
t = b[j];
b[j] = b[i-j-1];
b[i-j-1] = t;

你代码的交换逻辑有些问题,我的实现逻辑如下:

#include <stdio.h>
void DecToBin(int n,char b[])
{
    char tmp[64] = { 0 };

    int a, i = 0, j = 0;

    while (n > 0)
    {
        a = n % 2;
        tmp[i++] = a + '0';
        n /= 2;
    }

    while (i > 0)
    {
        b[j++] = tmp[--i];//二进制是余数的逆序
    }
    b[j] = '\0';//以'\0'结束
}

int main()
{
    char bin[64] = { 0 };
    int n;
    scanf_s("%d", &n);

    DecToBin(n, bin);

    printf("%s\n", bin);

    getchar();
    getchar();

    return 0;
}

如果对您有用,望采纳。