C++程序 要求输出1000以内的完数
#include<iostream>usingnamespacestd;intmain(){cout<<"1000之内的所有完数为"<<endl;floati=1.0;i...
#include<iostream>
using namespace std;
int main()
{
cout<<"1000之内的所有完数为"<<endl;
float i=1.0;
int s=0,n=1;
while(n<=1000)
{
while(i<n)
{
if(n/i-int(n/i)==0)
s=s+i;
i=i+1;
if(s==n)
cout<<n<<endl;
}
n=n+1;
}
return 0;
}
这个程序哪里错了 展开
using namespace std;
int main()
{
cout<<"1000之内的所有完数为"<<endl;
float i=1.0;
int s=0,n=1;
while(n<=1000)
{
while(i<n)
{
if(n/i-int(n/i)==0)
s=s+i;
i=i+1;
if(s==n)
cout<<n<<endl;
}
n=n+1;
}
return 0;
}
这个程序哪里错了 展开
3个回答
展开全部
if(n/i-int(n/i)==0)错了。
1、if(n/i-int(n/i)==0)这个改为if(n%i == 0)
2、找到一个完数以后,没有把s初始化为0,所以后面肯定会出错。在n=n+1;后面加s=0。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
扩展资料:
使用C++编程时的有关事项:
1、开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。
2、生成程序是指将源码转换成一个可以运行的应用程序的过程。如果程序的编写是正确的,那么通常只需按一个功能键,即可搞定这个过程。
3、对程序进行编译,这需要用到编译器。编译器将C++语句转换成机器码(也称为目标码);如果这个步骤成功,下一步就是对程序进行连接,这需要用到链接器。
参考资料来源:百度百科-C++
展开全部
int main()
{
cout<<"1000之内的所有完数为:"<<endl;
int i=0,n;
for(n=1;n<1000;n++)
{
int s=0;
for(i=1;i<=n/2;i++)
if(0==n%i)
s+=i;
if(s==n)
printf("%4d",n);
}
printf("\n");
return 0;
}
兰州 你的我没怎么看....那个浮点数运算本来就是不精确的....我写了个 你先看看...结果是三个 6 28 496
我看了下兰州的程序 给你改好了 有注释
int main()
{
cout<<"1000之内的所有完数为"<<endl;
int i=1;
//int s=0,n=1;
int s,n=2; //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
while(n<=1000)
{
s=0,i=1; //每次比较的时候s都要置为0 不然保留上次的结果
while(i<n) //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
{
if(n%i==0)
s=s+i;
i=i+1;
//if(s==n)
//cout<<n<<endl; //这个判断应该是在while(i<n)这个循环外面判断
}
if(s==n)
cout<<n<<endl;
n=n+1;
}
return 0;
}
结果运行 6 28 496 兰州你看看 还有if(n/i-int(n/i)==0)浮点数的比较是比精确的 一般是(a-b)<1e-5这样的....直接==是不对的
{
cout<<"1000之内的所有完数为:"<<endl;
int i=0,n;
for(n=1;n<1000;n++)
{
int s=0;
for(i=1;i<=n/2;i++)
if(0==n%i)
s+=i;
if(s==n)
printf("%4d",n);
}
printf("\n");
return 0;
}
兰州 你的我没怎么看....那个浮点数运算本来就是不精确的....我写了个 你先看看...结果是三个 6 28 496
我看了下兰州的程序 给你改好了 有注释
int main()
{
cout<<"1000之内的所有完数为"<<endl;
int i=1;
//int s=0,n=1;
int s,n=2; //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
while(n<=1000)
{
s=0,i=1; //每次比较的时候s都要置为0 不然保留上次的结果
while(i<n) //第一次比较时i=1,n=1...条件肯定不成立 所以直接n=2
{
if(n%i==0)
s=s+i;
i=i+1;
//if(s==n)
//cout<<n<<endl; //这个判断应该是在while(i<n)这个循环外面判断
}
if(s==n)
cout<<n<<endl;
n=n+1;
}
return 0;
}
结果运行 6 28 496 兰州你看看 还有if(n/i-int(n/i)==0)浮点数的比较是比精确的 一般是(a-b)<1e-5这样的....直接==是不对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(n/i-int(n/i)==0)这个改为if(n%i == 0)更好
第二:你找到一个完数以后,没有把s初始化为0,所以后面肯定会出错。
在n=n+1; 后面加s=0;
第二:你找到一个完数以后,没有把s初始化为0,所以后面肯定会出错。
在n=n+1; 后面加s=0;
追问
还是不可仪啊
追答
少写了个,还有i=1;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询