gpt4 book ai didi

c++ - 如何在指定区间内找到数字的约数?

转载 作者:行者123 更新时间:2023-11-30 03:44:03 29 4
gpt4 key购买 nike

我想用 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 循环版本中是不可能的,因为每次迭代都依赖于前一次迭代。

关于c++ - 如何在指定区间内找到数字的约数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727563/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com