第20题,感觉思路没啥问题,但是没有运行结果

img


#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;
}


这样修改后,你应该可以看到输出结果了。

https://blog.csdn.net/fffflc/article/details/128682084