|  | 
 
 发表于 2020-12-1 22:13:01
From FishC Mobile
|
显示全部楼层
|阅读模式 
 
| 
在主函数中,输入两个正整数m和n(m>=1, n<=1000),调用factorsum函数,输出m-n之间的所有完数,完数就是因子和与它本身相等的数。
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 
 
 
 
 
 #define _CRT_SECURE_NO_WARNINGS
 #include<stdio.h>
 int factorsum(int number);
 int main(void)
 {
 int number, m, n;
 number = m = n = 0;
 printf("Enter m,n:");
 scanf("%d%d", &m, &n);
 number = factorsum(number);
 printf("number=%d\n");
 return 0;
 
 
 }
 int factorsum(int number)
 {
 int i, sum, m, n;
 sum = 0;
 if (m >= 1, n <= 1000) {
 for (i = m, i < n, i++)
 {
 if (number % i == 0)
 sum = sum + i;
 }
 if (sum = number)
 return sum;
 }
 else
 printf("你输入m和n错误");
 }
 
下面两种求完数的方法,都是正确的,你分别试试 复制代码/* 计算完全数 ---- 一个数如果正好是它各个因子之和,就称之为完数 */
/* 100000000 以内只有 5 个,分别是:6、28、496、8128、33550336,所以,用键盘输入时最大输入 10000 就好 */
/* 因为计算 33550336 要花很长的时间,类似于死机 */
#if(1)                                               // if(1) 运行,if(0)停止
#include<stdio.h>
int main()
{
        int i, j, s, n;                                /*变量i控制选定数范围,j控制除数范围,s记录累加因子之和*/
        printf("请输入所选范围上限:");
        scanf("%d", &n);                               /* n的值由键盘输入*/
        for (i = 2; i <= n; i++)
        {
                s = 0;                                      /*保证每次循环时s的初值为0*/
                for (j = 1; j < i; j++)
                {
                        if (i%j == 0)                              /*判断j是否为i的因子*/
                                s += j;
                }
                if (s == i)                                  /*判断因子这和是否和原数相等*/
                        printf("It's a perfect number: %d\n", i);
        }
        return 0;
}
#endif
#if(0)
#include<stdio.h>
int main()
{
        int i, j, m, n, s;
        int k[100] = { 0 };
        printf("请输入所选范围上限:");
        scanf("%d", &m);
        for (j = 2;j < m;j++)
        {
                n = -1;                           // 因为数组是从0开始的,故设置 n = -1
                s = j;
                for (i = 1;i < j;i++)
                {
                        if ((j % i) == 0)
                        {
                                n++;                      // 因子计数器
                                s = s - i;
                                k[n] = i;                 // 能被 i 整除,i 就是因子,存入数组
                        }
                }
                if (s == 0)
                {
                        printf("%d 是一个完全数!  ", j);
                        printf("由下列各数相加得到:");
                        for (i = 0;i <= n;i++)
                        {
                                printf("%d,", k[i]);
                        }
                        printf("\n");
                }
                k[100] = { 0 };
        }
}
#endif
 | 
 |