当前位置:编程学习 > C/C++ >>

C语言求完数。

C语言求1-1000以内的完数。下面是我写出来的程序 
#include<stdio.h>void main(){int a,b,i,sum;for(i=1;i<=1000;i++){a=1;sum=0;while(a<i){b=i%a;if(b==0){sum=+b;}a++;}if(sum==i)printf("%d\n",sum);}}
 我的思路是,初始设除数a=1,然后用 i 对 a 求余,如果为0,就将值储存于sum中,然后a++直到 a < i 。然后将储存的值与 i 作对比,如果sum = i,那么就输入sum为完数。我现在程序写出来了,运行出来没有任何结果。 我现在有两个问题。 (1)这个是我的思路有问题,还是程序有问题。问题出在哪? (2)这道习题还有一个要求,就是要按照指定的格式输出,比如说完数6,要按照”6 its factors are 1 2 3“这样的格式输入。也就是说,每个完数,不但要输出它,还要输出它所有的因子。这第二个问题应该怎么解决?
 注:上面的两个问题,希望得到思路上的指导。
追问:谢谢,关于数组。。。
是在我做完这些题之后的下一章,第7章才开始学数组。
目前只学了循环结构,选择结构之前的东西。
我想这道题出在这个地方,应该就是要叫我用之前学到的东西去做,以便我能更熟练的运用。
可我就是不知道应该去实现。。。哭。
答案:思路是正确的,但是程序你写错了点地方。while循环体内,改成sum+=a,你原来的写法,sum=+b,第一不对,第二即使符合条件,根据if中的判断条件,b也恒等于0。
第二个问题,可以使用一个静态数组解决,因为完数在1000以内,肯定不会有太多因子。每个循环开始的时候,初始化数组,加个控制条件,控制数组的下标。自己先尝试一下吧。
有什么问题,可以再详说。
不好意思,才刚上线。
//(1)这个是我的思路有问题,还是程序有问题。问题出在哪? 
//思路是正确的,但是我想说的是你这句sum=+b  这个b始终为0的你是不是加错了,不是加a的嘛,即sum+=a.

//针对于第二个问题如果你没学过数组的话就重新再跑一遍不就行了
//例如:

if(sum==i) 
{
printf("%d its factors are ", i);
for(j=1; j<i; j++)
{
if(i%j == 0)
{
printf("%d\t", j);
}
}
printf("\n");
}


int i,j,a[300],n,sum;
for(i=2;i<1000;i++)
{sum=n=0;
for(j=1;j<i;j++)
if(i%j==0)
{sum+=j;
a[n++]=j;
}
if(sum==i)
{printf("%d its factors are  ",i);
for(j=0;j<n;j++)
printf("%d  ",a[j]);
puts("");
}
}

上一个:C语言程序的注意事项?
下一个:一个 C语言源代码算法

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,