Einstein777 2022-07-21 13:54 采纳率: 77.8%
浏览 22
已结题

为何两段代码只因s=0位置的不同就导致一个有输出结果

为何两段代码只因s=0位置的不同就导致一个有输出结果,一个没有。s=0定义在int中时没有结果,定义在第一个for循环中时有结果。

#include<iostream>
using namespace std;
int main()
{
    int a,s,i,j;
    cout<<"please enter the number:"<<endl;
    for(i=1;i<1000;i++)
    {
        s=0;
        for(j=1;j<i;j++)
            if(i%j==0)
            {
                s=s+j;
            }
        if(s==i)
        {
            cout<<s<<"是完数:";
            for(a=1;a<s;a++)
            {
                if(s%a==0)
                    cout<<a<<" "; 
            }cout<<endl;
        }
    }
    return 0;
}


#include<iostream>
using namespace std;
int main()
{
    int a,s=0,i,j;
    cout<<"please enter the number:"<<endl;
    for(i=1;i<1000;i++)
    {
        for(j=1;j<i;j++)
            if(i%j==0)
            {
                s=s+j;
            }
        if(s==i)
        {
            cout<<s<<"是完数:";
            for(a=1;a<s;a++)
            {
                if(s%a==0)
                    cout<<a<<" "; 
            }cout<<endl;
        }
    }
    return 0;
}


  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-07-21 13:56
    关注

    在循环中需要对s值进行复位,所以s=0在循环中一定要有
    因为每一个循环都是对循环值i进行完数判断,s是i的所有因子之和,因此它是对每个i都要计算出s的值。如果s不复位为0,那么它将是所有i值的因子之和,所以就不对了
    ============
    如果s=0只在循环外面,那么它只是对第一个i值是否完数判断进行了复位,后面的i值就没有复位了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 已采纳回答 7月22日
  • 创建了问题 7月21日