我们认为一个数字是好数,当且仅当它的十进制数位是连号,给定一个正整数n,请问(1,n)中有多少个好数,连号是指每一个数位都比上一个数位多1,补充说明函数的第一个参数输入一个整数n(1<=n<=10的5次方),请用C++编码
时间: 2024-10-29 19:09:56 浏览: 50
在C++中,你可以使用循环和条件判断来解决这个问题。下面是一个简单的解决方案:
```cpp
#include <iostream>
#include <vector>
int consecutiveNumbers(int n) {
if (n <= 9) { // 如果n小于等于9,只有一个数字,直接返回
return 1;
}
int count = 0;
for (int i = 1; ; ++i) { // 从1开始检查每个数
int current_num = i;
while (current_num <= n && std::isdigit(current_num) && (current_num % 10 == current_num / 10 - 1)) {
count++;
current_num *= 10; // 将当前数扩大一位
}
if (current_num > n) { // 当前数大于n,跳出内层循环
break;
}
}
return count;
}
int main() {
int n;
std::cout << "请输入一个正整数(1 <= n <= 10^5): ";
std::cin >> n;
int result = consecutiveNumbers(n);
std::cout << "在(1, " << n << ") 中有 " << result << " 个好数。\n";
return 0;
}
```
这个程序首先检查基础情况(n是否小于等于9),然后通过循环不断生成连续的数字并检查它们是否在指定范围内。如果满足条件,计数器就增加,直到超过n为止。
阅读全文