当前位置: 首页 > 知识库问答 >
问题:

根据用户输入从一系列数字中找到一个完美数字

金赤岩
2023-03-14

用户输入一个数字,例如100。我们需要在1到用户输入的范围内找到100的完美数字。

完美数是一个正整数,等于除数字本身之外的正因子之和。

例如,6是一个完美的数字,因为6是(1,2和3)的总和,它们是6的除数。

#include <iostream>
using namespace std;

int main() {

int input;
int sum=0;

cout << "\t Find perfect Numbers" << endl;
cout << "-------------------------------- \n";
cout << "Enter an upper bound Number: ";
cin >> input;

for (int i=1; i<input; i++)
{
    for(int u=1; u<i; u++)
    {
        if (i%u == 0)
        {
            sum += u;
        }
    }
    if (sum == i)
    {
        cout << sum;
    }
}
return 0;

}

在我运行这段代码之后,它要求我输入一个数字,一旦我输入了一个数字,程序就会退出,而不会打印预期的结果。

共有2个答案

任昊苍
2023-03-14

这将获得用户范围内的所有完美数字

#include <iostream>

using namespace std;

int main()
{
int input;
int sum=0;

cout << "\t Find perfect Numbers" << endl;
cout << "-------------------------------- \n";
cout << "Enter an upper bound Number: ";
cin >> input;

for (int i=1; i<input; i++)
{
for(int u=1; u<i; u++)
{
    if (i%u == 0)
    {
        sum += u;

    }
}
if (sum == i){
          cout << "\n the perfect number is " <<sum;

        } 
sum = 0;
}
return 0;

}
上官彬
2023-03-14

您需要在第二个for循环之前重置sum。如果没有,则sum将在该范围内不断增加。

这意味着,例如,在检查案例i==6之前,sum的值在进入第二个循环之前将等于6。然后在本测试结束时,您将获得sum==12,然后您的测试将失败。

因此,只需在第一个循环的开始(或结束)将sum重置为1即可:

for (int i=1; i<input; i++){

   sum = 1; // <-- Don't forget this line !

   for(int u=2; u < i/u ; u++) // Only going to square root and add u + i/u if i%u == 0
   {
      if (i%u == 0)
      {
         sum += u + i/u; // If i is divisable by u, it is divisable by i/u
      }
   }
   if (sum == i)
   {
      std::cout << sum << std::endl;
   }

}

正如Bob__所指出的,去sqrt(i)并同时添加u和i/u就足够了,并且大大减少了执行时间。

编辑:重置为1允许避免循环的1次迭代

 类似资料:
  • 假设我有一个从1到10的值范围。我想根据某种高斯概率从这个范围中随机选择一个数字。所以,有更高的机会得到大约4,5,6的值。仍然有机会得到1和10,但机会更小。它不需要完全遵循高斯分布,因为那样1和10的值几乎是不可能得到的。我希望至少改变和歪曲得到极值的机会,同时分散得到其他值的机会。通过倾斜,我的意思是有时我希望得到10的机会大于1。所以分布不一定是对称的。 我试着使用random类创建一个随

  • 您好,我有以下内容,基本上它打印三角形数字,我想做的是设置n=用户键盘输入,基本上用户输入一个迭代,它打印出输入的迭代次数的三角形序列。 如果我想在n=无时无限循环,那么这大概就是n=“”。。。但我不知道怎么做 任何帮助都将不胜感激。 这是Python编码 使用Seons解决方案时出错 错误!请输入数字或留空。回溯(最近一次调用):文件"",第15行,get_valid_user_inputVal

  • 给定一个GUI应用程序,用户将选择两个单选按钮中的一个,或。根据他的选择,他将输入不同的输入。但是,要计算一个公式,他会点击一个常规按钮,。 但是,当中调用了两个以上的成员函数时,问题就随之而来了。 因为在中, 但是,该程序只在调用堆栈中向下一个级别,返回异常对话框。如何使用户按下按钮时,根据选择的是还是分别得到或?

  • 这是一个塔克店的节目! http://paste.ubuntu.com/5967772/ 给出错误

  • 例如,243是3的完美幂,因为243=3^5。 我以前一直在使用,我认为它工作得很好,但后来我用上面的示例尝试了它,由于浮点运算,它实际上返回了4.99999999999。所以它只适用于非常小的数字,我发现不到大约100个。 我想我可以用一个循环来重复乘法。。。i、 将i设置为3,然后设置为9,然后设置为27,然后设置为81,然后设置为243,这等于目标值,所以我们知道这是一个完美的幂。如果它达到

  • 我在课堂上创建了两个列表。 其中一个称为预算,包含元素section、month和sum,返回以下内容: [Budzet{sec='AGD/RTV',月='01',和=96},Budzet{sec='AGD/RTV',月='03',和=30},Budzet{sec='食品',月='04',和=23},Budzet{sec='游戏',月='09',和=1084}...] 这是SQL查询 第二个是元素

  • 任务是“编写一个程序,为用户输入的整数显示用户指示的倍数。” 我想我不需要一个完全直接的答案(尽管我确实想知道要使用的方法/公式),因为我想把这个作为一个学习经验,以便自己完成任务并从中学习。我真的想知道的过程和使用的方法,以及找到一个公式。: 我真的不确定如何编写一个代码,显示一个用户输入的整数的用户输入的数字。最难的部分似乎是编写循环公式。不知道从哪里开始。 到目前为止,我已经: 我真的不确定

  • 我是Java新手,为了练习,我在互联网上找到了一项任务: "在你输入的两个数字之间找到所有完美的数字。" 顺便说一下——一个完美的数字是一个自然数,等于它所有除数的和。所以我开始工作,遇到了这样一个问题,当我输入两个数字时。 例如:,我在控制台中得到正确答案:。但是,如果第一个数字是,例如,,第二个是,我会将此输出输出到控制台:,而我应该只得到。也就是说,出于某种原因,最小值不会缩短对完美数的搜索