#include <iostream> using namespace std; int main() { // 升序输出表明从1开始至n结束,每次递增1,从中剔除4的倍数或包含数字4的 // 最大输入1e5说明最多有6位数字,用6个变量分别存储6个数字位,a用来判断是否为4的倍数 // 解题思路就是每次递增后,去判断这6个变量是否为4,以及a是否为4,如果是的话就不要输出数字 short a1,a2,a3,a4,a5,a6, a; a1 = 0; a2 = 0; a3 = 0; a4 = 0; a5 = 0; a6 = 0; a = 0; // a1表示个位,a2表示十位 ... int n; cin >> n; // 把数接收进来 for(int i = 1; i <= n; i++) { a++;a1++; // 只需要a和个位数a1自增 if(a1 == 10) // 个位逢10进1 { a1 = 0; a2 += 1; } if(a2 == 10) // 十位逢10进1 { a2 = 0; a3 += 1; } if(a3 == 10) { a3 = 0; a4 += 1; } if(a4 == 10) { a4 = 0; a5 += 1; } if(a5 == 10) { a5 = 0; a6 += 1; } if(a == 4) // 每次a为4表示当前数字i是4的倍数,此时不要打印数字i { a = 0; // 不要忘记重置a continue; } if(a1==4 || a2==4 || a3==4 || a4==4 || a5==4 || a6==4) continue; // 若有任意位出现4则不打印 cout << i << endl; } } // 64 位输出请用 printf("%lld")