#include
using namespace std;
int main()
{
int i=1,s=1,a[100]={0},q=0,sum=0,m=0,j;
// while(i<=1000) (从1开始到1000逐个判断)
{
while(s*s<=i)
{
if(i%s==0)
{
// a[q]=s; (将因子录入数组中)
q++;
// if(i/s!=s) (避免重复录入)
{
a[q]=i/s;
q++;
}
s++;
}
else
s++;
}
// q=0; (为下次循环做准备)
while(a[m]!=0)
{
// sum+=a[m];(因子求和)
m++;
}
// m=0; (为下次循环做准备)
// sum=sum-i;(去掉本身)
if(sum==i)
{
cout<"its factors are";
while(a[m]!=0)
{
cout<0;
// for(j=0;j<100;j++)
// a[j]=0;(将数组重置为0)
i++;
}
return 0;
}
感觉有些复杂,没有结果是没有输出么?代码怎么这么多注释???
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的代码中,第一层while循环的条件没有被注释掉,这意味着该循环将无限循环下去,导致代码无法继续执行。你需要将该循环的注释符号(//)去掉,或者将其删除,才能继续执行代码。
此外,在计算因子和时,你使用了一个while循环来遍历数组中的元素,但是你没有将sum变量累加到每个因子上。你需要在循环中添加sum += a[m]的语句,才能计算出因子的总和。
最后,在输出因子时,你需要在每个因子后面添加一个空格或其他分隔符,以便让它们更易于阅读。否则,输出结果将会很难看。
下面是你的代码的修改建议:
#include<iostream>
using namespace std;
int main()
{
int i=1,s=1,a[100]={0},q=0,sum=0,m=0,j;
while(i<=1000) // 从1开始到1000逐个判断
{
while(s*s<=i)
{
if(i%s==0)
{
a[q]=s; // 将因子录入数组中
q++;
if(i/s!=s) // 避免重复录入
{
a[q]=i/s;
q++;
}
s++;
}
else
s++;
}
q=0; // 为下次循环做准备
while(a[m]!=0)
{
sum += a[m]; // 因子求和
m++;
}
m=0; // 为下次循环做准备
sum=sum-i; // 去掉本身
if(sum==i)
{
cout<<i<<endl<<"its factors are ";
while(a[m]!=0)
{
cout<<a[m]<<" ";
m++;
}
cout<<endl;
}
sum=0;
for(j=0;j<100;j++)
a[j]=0; // 将数组重置为0
i++;
}
return 0;
}
这样修改后,你应该可以看到输出结果了。