一、洁净数
#include <iostream>
#include<string>
using namespace std;
int main()
{
// 请在此输入您的代码
int n;
cin >> n;
int count = 0;
for (int i = 1; i <=n; i++) {
string str_n = to_string(i);
bool hasTwo = false;
for (int j = 0; j < str_n.length(); j++) {
if (str_n[j] == '2') {
hasTwo = true;
break;
}
}
if (!hasTwo) {
count++;
}
}
cout << count << endl;
return 0;
}
-
int n; cin >> n;
:声明一个整数变量n
,并通过标准输入流cin
获取用户输入的数字。 -
int count = 0;
:初始化一个整数变量count
,用于记录不含有数字 2 的整数的个数。初始值为 0。 -
for (int i = 1; i <= n; i++) { ... }
:外部循环,从 1 开始遍历到输入的数字 n。 -
string str_n = to_string(i);
:将当前迭代的数字i
转换为字符串,以便后续遍历每个数字的每一位。 -
bool hasTwo = false;
:声明一个布尔变量hasTwo
,用于标记当前数字是否包含数字 2。初始值为false
。 -
for (int j = 0; j < str_n.length(); j++) { ... }
:内部循环,遍历当前数字的每一位。 -
if (str_n[j] == '2') { hasTwo = true; break; }
:如果当前数字的某一位是数字 2,将hasTwo
设置为true
,并立即退出内部循环。这是因为只要当前数字含有数字 2,就不符合条件,无需继续遍历。 -
if (!hasTwo) { count++; }
:在内部循环结束后,如果hasTwo
的值仍然是false
,表示当前数字不含有数字 2,因此将count
值加一。 -
cout << count << endl;
:输出统计结果,即不含有数字 2 的整数的个数。
通过这段代码,我们可以有效地统计从 1 到输入的数字 n(包括 n)之间,所有不含有数字 2 的整数的个数,并输出结果。
这道题关键在于变整数为字符串