| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 16005 人关注过本帖
标题:使用函数输出指定范围内的完数
只看楼主 加入收藏
小可爱0920
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2016-12-18
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:3 
使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

输入
输出
样例输入
1 30
样例输出
1 is a perfect number
1 = 1
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
搜索更多相关主题的帖子: 正整数 
2016-12-19 17:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
做了一下,刚刚在图形专区做了份类似的,现在把它copy过来略加修改就可以了~

程序代码:
#include<stdio.h>
#include<stdlib.h>
int fun(int n,int a[])//n为所求数据
{
    int i=2,k=1,j=1;//i从2开始//k为求和//j为记录数组下标

    if (n==1)//考虑特殊情况
        return 0;

    for (;i<=n/2;i++)//比较到n/2就行了~
        if (n%i==0)
        {
            k+=i;//求和
            a[j++]=i;// 保存数据
        }
    
    return k;
}

void print(int a[],int num)
{
    int i,j;

     printf("%d=",num);

     for (i=0;a[i];++i)
          printf("%d+",a[i]);

    printf("\b \n");
}
int main()
{
    int n,m,i,j,a[100]={0};//保存完数的数组
    a[0]=1;

    scanf("%d%d",&m,&n);//输入数据

    if (m==1)
        printf("1=1\n");

    for (i=m;i<n+1;i++)
    {
        if (i==fun(i,a))//
            print(a,i);

        memset(a,0,sizeof(a));//数组重置

            a[0]=1;//初始化
    }

    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-20 01:27
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
所谓完数就是该数恰好等于除自身外的因子之和。
1怎么能算完数呢?

Code is my life.
2016-12-20 10:20
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
#include <stdio.h>
main()
{
    int i, j, m, n=10000;
    char s[2048];
    for (i=2; i<=n; i++)
    {
        sprintf(s, "1");
        for(j=2,m=1; j<i; j++)
        {
            if ((i%j) == 0)
            {
                sprintf(s, "%s + %d", s, j);
                m += j;
            }
        }
        if (i == m)
            printf(" %d = %s 完数\n", i,s);
        //else if (i < m)
        //    printf(" %d < %s 盈数\n", i,s);
        //else
        //    printf(" %d > %s 亏数\n", i,s);
    }

}
2016-12-20 10:46
快速回复:使用函数输出指定范围内的完数
数据加载中...
 
   



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

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