c++ - 我的代码仅适用于一个输入。请指教
问题描述
我是 C++ 问题的初学者。我试图尝试确定数字是否完美的问题。我的代码似乎只适用于一个数字,即 6。对于所有其他数字,它都像数字 28 一样失败。我找不到哪里出错了。请指教
#include <iostream>
using namespace std;
int main()
{
int n;
int sum = 1;
cout<<"enter a number : " <<endl;
cin>>n;
for(int i =2;i<=n-1;i++)
{
if(n%i != 0)
{
break;
}
else
{
sum = sum + i;
}
}
if(sum == n)
{
cout<<"Perfect Number"<<endl;
}
else
{
cout<<"Not a perfect number"<<endl;
}
return 0;
}
解决方案
你的问题在这里:
for(int i =2;i<=n-1;i++)
{
if(n%i != 0)
{
break;
}
else
{
sum = sum + i;
}
}
随着break
您停止for
循环的整个迭代,这意味着在第一个不是除数的数字之后,即n%i != 0
等于 true 时,您将跳出循环并继续执行if(sum == n)
. 我猜你误会了,因为你不想添加i
不是除数的 s,你太“渴望”不计算它们。我猜您将它与continue
返回for
条件检查并i+1
在条件仍然为真时继续执行的情况混为一谈。
仍然就像您将加法打包在一个分支中一样,这意味着只有当且仅前一个为假时else
才会发生求和,这意味着如果它是一个除数。这就是你不需要的原因,在这种情况下,这不会有任何大的区别,也不会“破坏”你的程序。if
n%i != 0
continue
break
推荐阅读
- ajax - BootsFaces DateTimePicker AJAX 不工作
- swift - 领域模型转换失败
- javascript - vue.js:无法从计算属性访问路由器参数
- angularjs - 在个人资料图像上使用 AngularJS 的三元运算
- scala - 如何覆盖案例类属性并避免重复存储?
- laravel-5 - Laravel 关系返回空结果
- c++ - C ++内联汇编试图将字符从字符串复制到寄存器中
- javascript - 仅在图表 highcharts 上显示第一个和最后一个 y 轴标签
- excel - 将 excel 文件从 micro 发送到 micro
- javascript - 未捕获的 ReferenceError:未定义要求(电子)