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

京公网安备 11010502036488号