输入2 个正整数m 和n(m≥1,n≤1 000),输出m ~n 之间的所有完数

#include<stdio.h>
double fact(int n);
int main()
{
int m,n,i;
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
for(i=m;i<=n;i++){
if (fact(i)==i)
printf("%5d",i);
}
return 0;
}
double fact(int n)
{
int i,x,y;
double result;
result=0;
for(i=2;i<=x;i++){
if(x%i==0)
y=x/i;
else
y=0;
result=result+y;
}
return result;
}

为什么运行出来是这样的呢

#include<iostream>

#include<math.h>

using namespace std;

void main(){

 int i;

 long wanshu=0;

 int n,x,y;

 cout<<"输入n:"<<endl;

 cin>>n;

 cout<<"输入x:"<<endl;

 cin>>x;

 cout<<"输入y:"<<endl;

 cin>>y;

 for(i=1;i<=n;i+=2){

  wanshu+=pow(i,3);

  if(wanshu==1){

   continue;

  }

  if(wanshu>=x&&wanshu<=y)

   cout<<"n以内的完数:"<<wanshu<<"\t"<<endl; 

 }

 system("pause");}

解这个题的方法有很多,我写一个吧!!!x代表m,y代表n(至于n不能输太大,输入10就可以达到你题的要求了,另外我写的是c++,思想没问题)

传个图吧!!!自己看!!!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-19
把int i,x,y; 中的,x删掉;

for(i=2;i<=x;i++){
if(x%i==0)
y=x/i;
else
y=0;
中的x改成n试试……
第2个回答  2013-04-19
肯定没有啊,我不知道什么叫完全数哦,但是看你写的那个函数fact,你没有发现那个里面的x没有赋初值,并且没有用到n吗?我觉得你应该要把x改为n,
第3个回答  推荐于2018-04-10
子函数改成如下:
int fact(int n)
{
int i;
int result;
result=0;
for(i=1;i<n;i++) //待查的因子从1到n
{
if(n%i==0)
result=result+i; //这里要加的是因子
}
return result;
}追问

在1-100之间的完数应该是1.6.28
但是这个程序只输出6.28
怎么改呢

追答

nt fact(int n)
{
int i;
int result;
result=1;
for(i=2;i<n;i++) //待查的因子从1到n
{
if(n%i==0)
result=result+i; //这里要加的是因子
}
return result;
}

本回答被提问者和网友采纳
相似回答