根据用户输入从一系列数字中找到一个完美的数字
Find a perfect Number from a range of numbers based on user input
用户输入一个数字。
一个完美的数字是一个正整数,等于其正数本身的正分数之和。
例如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;
}
运行此代码后,它要求我输入一个数字,一旦输入一个数字,程序就会退出而无需打印预期的结果。
您需要在第二个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循环的迭代
这将使您在用户范围内为您提供完美的数字
#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;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 试试完美的正方形,你能给点小费吗
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 根据用户输入从一系列数字中找到一个完美的数字
- 使用函数C++找到完美数字
- 找到完美的数字
- 有人能给我一些关于在C++中使用数组打印出丰富、完美和不足的数字的提示吗
- C 完美的数字,带有嵌套循环问题
- 我的算法对小数字的准确性是完美的,当数字较大时就会下降,但并非总是如此
- 如果输入的数字不是完全正方形,则找到最接近的完美正方形