看不懂这个程序,大哥们给解释下!
#include<stdio.h>
int main()
{
int i,t,j,num,data[100];
for(num=1;num<=1000;num++)
{
j=0;
i=1;
t=num;
while(i<num)
{
if(num%i==0)
{
t=t-i;
data[j]=i;
j++;
}
i++;
}
if(t==0)
{
printf("%d its factors are ",num);
for(i=0;i<j;i++)
{
printf("%d",data[i]);
if(i!=j-1)
{
printf(",");
}
}
printf("\n");
}
}
getch();
}
----------------解决方案--------------------------------------------------------
这应该是一个求完数程序,所谓完数,就是一个数正好等于它的所有因子之和.如6=1+2+3;所以6是完数.
#include<stdio.h> //头文件
int main()
{
int i,t,j,num,data[100];
for(num=1;num<=1000;num++)
{
j=0;
i=1;
t=num;
while(i<num) //求出num的因子并将其分别赋给data中;t不断减去因子,如t为零.说明是完数
{
if(num%i==0)
{
t=t-i;
data[j]=i;
j++;
}
i++;
}
if(t==0) //如t为零则是完数
{
printf("%d its factors are ",num);
for(i=0;i<j;i++)
{
printf("%d",data[i]); //将所有因子输出
if(i!=j-1)
{
printf(",");
}
}
printf("\n");
}
}
getch();
}
----------------解决方案--------------------------------------------------------
一语惊人!是我糊涂了,if语句内部t值改变了,而我以为是while语句内改变的。怎么想怎么不明白,如果t值变了,那怎么继续求它别的因子呢?!!!现在明白了 呵呵 谢了!!
----------------解决方案--------------------------------------------------------
if语句内部t值是不是会被减到负数啊?但是并不影响判断。
----------------解决方案--------------------------------------------------------
t是局部动态变量 每次遍历的时候总是等于 num
而 num>i的 t-=i 始终大于 0吧 !不会到负数。
----------------解决方案--------------------------------------------------------
恩,是的。但要求的是完数,t最后等于0才符合要求
----------------解决方案--------------------------------------------------------
不是吧!if内的t好象能减到负数也!如t=12时,他的因子有1,2,3,4,6 那么12-1-2-3-4-6<0了呢!!
----------------解决方案--------------------------------------------------------
哈哈!!!会减到负数的.你把t==0改为t<0再编译一下就知道有哪些数会被减到负了,
----------------解决方案--------------------------------------------------------