标题:看不懂这个程序,大哥们给解释下!
只看楼主
lxm520910
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-10-3
 问题点数:0 回复次数:7 
看不懂这个程序,大哥们给解释下!

#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();
}

搜索更多相关主题的帖子: int 解释 num main 
2007-10-17 18:46
once_again
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-10-4
得分:0 
这应该是一个求完数程序,所谓完数,就是一个数正好等于它的所有因子之和.如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();
}

要想学好六脉神剑就得先学好北冥神功!!!!
2007-10-17 19:25
lxm520910
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-10-3
得分:0 
一语惊人!是我糊涂了,if语句内部t值改变了,而我以为是while语句内改变的。怎么想怎么不明白,如果t值变了,那怎么继续求它别的因子呢?!!!现在明白了  呵呵 谢了!!
2007-10-17 19:34
ascend_0707
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-16
得分:0 
if语句内部t值是不是会被减到负数啊?但是并不影响判断。
2007-10-17 19:51
Cy_Chance
Rank: 1
等 级:新手上路
帖 子:46
专家分:1
注 册:2007-10-15
得分:0 
t是局部动态变量 每次遍历的时候总是等于 num
而 num>i的 t-=i 始终大于 0吧 !不会到负数。
2007-10-17 20:03
lxm520910
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-10-3
得分:0 

恩,是的。但要求的是完数,t最后等于0才符合要求

2007-10-17 20:03
lxm520910
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-10-3
得分:0 
不是吧!if内的t好象能减到负数也!如t=12时,他的因子有1,2,3,4,6 那么12-1-2-3-4-6&lt;0了呢!!
2007-10-17 20:06
once_again
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-10-4
得分:0 
哈哈!!!会减到负数的.你把t==0改为t<0再编译一下就知道有哪些数会被减到负了,

要想学好六脉神剑就得先学好北冥神功!!!!
2007-10-17 20:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-178484-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.686319 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved