|
发表于 2020-12-1 22:13:01
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在主函数中,输入两个正整数m和n(m>=1, n<=1000),调用factorsum函数,输出m-n之间的所有完数,完数就是因子和与它本身相等的数。
#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
复制代码
|
|