#include <stdio.h>
#include <string.h>
int main() {
    char arr[10] = { 0 };
    scanf("%s", arr);
    int size = strlen(arr);//计算数组的长度
    int i = 0;
    for (i = 0; i < size; i++) {
        if (arr[i] % 2 != 0) {//此位置是奇数
            arr[i] = '1';
        }
        else {
            arr[i] = '0';
        }
    }
    int f = 0; // 前导零标记
  // 输出非零后的所有数字
    for (i = 0; i < size; i++) {
        if (arr[i] != '0') {
            f = 1;// 发现第一个非零字符
        }
        if (f) {
            printf("%c",arr[i]);
        }
    }
    if (f == size) {
        printf("0");
    }
    return 0;
}

这道题挺牛逼的,写代码时稍有不注意就掉到坑了去了,题目中说数字范围在0 ≤ n ≤ 109

之间,我们选择字符数组来读取,因为字符串后面'\0'结尾所以,申请10个,strlen函数求的是'\0'之前的字符个数,

记住arr[i] = '1',arr[i] = '0';这个代码不能写成arr[i] = 1,arr[i] = 0,这里,1和0是整型数值,对应的ASCII码是1(SOH,控制字符)和0(NUL,空字符),而不是字符'1'和'0'。在打印时,会依次输出控制字符,用户看不到任何显示。

还有一点要从第一个不是0的数开始打印。