| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 551 人关注过本帖
标题:大家帮我看看,求解答
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:8 
大家帮我看看,求解答
这个问题是在回复https://bbs.bccn.net/thread-337285-1-1.html的时候遇到的
下面的程序是用来测试一个数字是否为完数,并找出它的所有因子

程序代码:
#include <stdio.h>

int is_perfect_p(int n, int f[]) {    // 测试是否为完数,并找出它的因子
    int i, j = 1, sf = 1;
    f[0] = 0;
    for (i = 2; i * i < n; i++) {
        if (n % i == 0) {
            f[j++] = i;
            f[j++] = n / i;
            sf += i + f[j - 1];
        }
    }
    if (i * i == n) {
        sf += i;
        f[j++] = i;
    }
    f[0] = j;
    return sf == n;
}

int sort(int a[]) {    // 排序。这里用来对因子进行排序,使输出的信息更清楚
    int i, j, k;
    for (i = 1; i < a[0]; i++) {
        for (j = i + 1; j < a[0]; j++) {
            if (a[j] < a[i]) {
                k = a[i];
                a[i] = a[j];
                a[j] = k;
            }
        }
    }
    return 0;
}

int factors[20] = {0};    // 有件事我很不解。如果把这个定义放在 main() 函数里,就会死循环。大家试一下在你们的机器上会不会这样。ps: gcc 4.5.2

int main() {
    int i, j;
    for (i = 6; i <= 1000; i++) {
        if (is_perfect_p(i, factors)) {
            sort(factors);
            printf("%d its factors are 1,", i);
            for (j = 1; j < factors[0] - 1; j++) {
                printf("%d,", factors[j]);
            }
            printf("%d\n", factors[j]);
        }
        //printf("%d\n", i);
    }
    return 0;
}

求高手讲解原因

[ 本帖最后由 voidx 于 2011-4-20 18:38 编辑 ]
搜索更多相关主题的帖子: color 
2011-04-20 18:32
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
放在main中不是死循环。
2011-04-20 18:57
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
int i,j,m=0,x=0,s,a[100];
for(i=2;i<10000;i++)
{s=0;j=0;x=0;
while(++j<i)
{if(i%j==0)
{s=s+j;
a[x++]=j;}}
if(s==i)
{
printf("%d:",i);
for(m=0;m<x;m++)
printf("%d,",a[m]);
printf("\n");
}}
2011-04-20 19:24
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
声明个数组会死循环???不会吧

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 19:43
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
拜托大家不要懒,编译一下我的代码运行试试。

我使用 gcc 4.5.2 编译的,大家试试别的编译器有没有问题
2011-04-20 20:06
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
求解答啊~~如果把上面代码里说的那行放进 main() 里,然后用 gcc 4.5.2 编译绝对会死循环,至少我的机器上是这样
2011-04-20 21:36
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:20 
数组越界.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2011-04-20 22:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
不愧是孔明~~一语道破天机
2011-04-21 00:36
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
用VC不是哦
2011-04-21 06:52
快速回复:大家帮我看看,求解答
数据加载中...
 
   



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

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