题目:一个整数如果从低位到高位顺序,奇数位(个位,百位,万位 ........)上的数字是奇数,偶数位(十位,千位,十万位.........)的数字是偶数,我们就称之为“好数”。
给定一个整数N,请计算从1到N一共有多少个好数。
思路:
1 进行判断前就可以排除大部分数,比如个位上是偶数的数字就没必要进行判断了,空间复杂度和时间复杂度都减少了很多。
2 首先用ant记录数位,每判断一次就加一。
3 取出数后对每个数位上的数字单独取出做判断,看到属于奇数还是偶数。
4 最后输出结果。
【程序源代码如下】如有更好地代码,欢迎大家指教
//#include<stdbool.h>
//#include<stdio.h>
//bool check(int x)
//{
// int ant = 1;//记录数位
// while (x)
// {
// int b = x % 10;
// if (ant % 2 == 1){//奇数位
// if (b % 2 != 1) return false;
// }
// else if (b % 2 != 0) return false;
// ant++;
// x /= 10;
// }
// return true;
//}
//int main()
//{
// int i, n;
// int ans = 0;
// scanf("%d", &n);
// for (i = 1; i <= n; i++){
// if (i % 10 % 2 == 0) continue;
// if (check(i))
// ans++;
// }
// printf("%d ", ans);
// return 0;
//}