如何在指定的时间间隔内找到数字的除数
How to find divisors of number on specified interval?
我想用WHILE循环编写一个简单的程序,你可以用它得到你输入的数字的所有除数。
例如,您需要数字 30 的所有除数,它们是:1、2、3、5、6、10、15、30。现在,您希望程序仅显示间隔(例如)从5到10的数字,即5,6和10。
到目前为止,我尝试的是使用 FOR 句子让所有这些除数,但没有间隔,所以我被卡住了,不知道如何在 WHILE 循环中也使用它。
#include <iostream>
using namespace std;
int main() {
int input_number;
cin >> input_number;
cout << "All numbers are " << input_number << endl;
for (int i = 1; i <= input_number; i++) {
if (input_number % i == 0) {
cout << i << " ";
}
}
return 0;
}
另外感谢您的帮助。
在while
循环中解决这个问题可能不像在for
循环中解决这个问题那么简单(或蛮力)。
考虑使用 while
的循环再现:
int input_number;
std::cin >> input_number;
int i = 1; //Start trying to divide the input number by 1
int limit = input_number; //Termination condition for the loop
while(i < limit) {
if(input_number % i == 0) { //If divisible by i, both i and input_number/i are factors
std::cout << i << " " << input_number / i << " ";
}
++i; //Try dividing by the next integer
/*Set the limit to our latest input_number/i so we don't get duplicate
results (e.g. (5, 6) and (6, 5) for input_number = 30)*/
limit = input_number / i;
}
对于input_number = 30
,此循环仅运行 5 次迭代,而for
循环版本运行 30 次迭代。
底线
for
循环和while
循环是可以互换的,但是使用for
循环处理问题可能会比使用while
循环更快地解决问题,反之亦然,因为它们可以帮助您从不同的角度思考问题。
额外信息
for
循环版本允许某些优化技术,例如并行累加器,这在while
循环版本中是不可能的,因为每次迭代都取决于前一个。
为什么要将其作为while
循环? for
绝对是这里循环的正确选择。通过以下方式非常清楚地检查所有除数:
for (int i = 1; i <= input_number; i++) { ... }
如果你想添加一个更窄的窗口,你可以改变循环的边界:
for (int i = lower_bound; i <= upper_bound; i++) { ... }
<小时 />将其转换为while
循环只需将这些语句解开为:
int i = lower_bound;
while (i <= upper_bound) {
...
i++;
}
但这更容易出错 - 如果你的循环体中有continue
,i
就不会增加。
相关文章:
- 查找数字是否为 2 的幂的时间复杂度
- 编译时间文本到数字转换 (atoi)
- 如何以正确的时区从XTS索引中获取数字时间?
- 从时间生成'random'数字?
- 用O(1)表示法求一系列数字的平均值——常数时间
- 像儒略数字用于计算日期一样,是否有任何特定的数字来计算时间
- 如何在数组中将n 个数字相加,乘以给定范围,并在O(n)时间内反转数组中的范围
- 在小数秒内仅用 3 位数字格式化 posix 时间
- 将日期和时间数字转换为time_t并指定时区
- 如何设置时间以差 1 秒输出数字
- 如何在指定的时间间隔内找到数字的除数
- 以毫秒为单位的时间戳给了我 10 位C++数字
- 加泰罗尼亚数字,递归函数时间复杂度
- C++字母等效数字代码的睡眠时间
- 使用O(n)时间和O(1)空间从数组中查找丢失的数字
- 在确定的时间内生成特定数字的随机序列
- 友好数字:运行时间太长.是什么导致的呢?算法的复杂性
- c++随机数字总是相同的,即使时间(0)作为种子
- 删除<数字>在O(n)时间内来自容器的元素的数量
- 给定一个排序数组和一个参数 k,求出线性时间内大于或等于 k 的两个数字的总和