一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。
给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。
#include <iostream>
using namespace std;
// 判断一个数字是否是"好数"
bool isGoodNumber(int num) {
int originalNum = num;
int position = 1; // 用来记录当前位是奇数位还是偶数位,1表示奇数位,2表示偶数位
while (num > 0) {
int digit = num % 10; // 取出当前最低位的数字
if (position % 2 == 1 && digit % 2 == 0) { // 奇数位必须是奇数
return false;
}
if (position % 2 == 0 && digit % 2 != 0) { // 偶数位必须是偶数
return false;
}
num /= 10; // 去掉当前最低位的数字
position++; // 移动到下一位
}
return true;
}
int countGoodNumbers(int N) {
int count = 0;
for (int i = 1; i <= N; ++i) {
if (isGoodNumber(i)) {
++count;
}
}
return count;
}
int main() {
int N;
cin >> N;
int result = countGoodNumbers(N);
cout <<result;
return 0;
}