#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的数开始打印。