输出完数
在主函数中,输入两个正整数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错误");
} #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorsum(int number)
{
int i , sum = 0 ;
if(number > 0) for(i = 1 ; i < number ; i ++) if(! (number % i)) sum += i ;
return sum ;
}
int main(void)
{
int k , m , n ;
printf("Enter m , n : ") ;
scanf("%d%d" , & m , & n) ;
for(k = m ; k <= n ; k ++) if(k == factorsum(k)) printf("%d\n" , k) ;
}
编译、运行 实况:
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
Enter m , n : 2 20000
6
28
496
8128
D:\00.Excise\C> 你的程序的错误,我在注释中已经指出,不过即使是修改了,你的程序也是不能输出完数的。我一会将正确的程序发出来
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorsum(int number);
int main(void)
{
int number, m, n;
number = 0; // 赋初值不能用逗号连着来,要一个一个地赋值.m、n 不需要赋初值
printf("Enter m,n:");
scanf("%d%d", &m, &n);
number = factorsum(number);
printf("number=%d\n",number);// 输出有控制符,还得有受用的主体 number
return 0;
}
int factorsum(int number)
{
int i, sum = 0, m, n; // sum 需要赋初值
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 = { 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 = i; // 能被 i 整除,i 就是因子,存入数组
}
}
if (s == 0)
{
printf("%d 是一个完全数!", j);
printf("由下列各数相加得到:");
for (i = 0;i <= n;i++)
{
printf("%d,", k);
}
printf("\n");
}
k = { 0 };
}
}
#endif #include<stdio.h>
int factorsum(int num1,int num2);
int main(void)
{
int m, n;
printf("输入下限、上限:");
while (scanf("%d%d", &m, &n) == 2)
{
if ((m >= 1 && n <= 1000) && m < n)
{
printf("%d和%d之间的所有完全数如下:\n", m, n);
factorsum(m, n);
}
else
printf("你输入m和n错误。\n");
printf("输入下限、上限:");
}
printf("结束\n");
return 0;
}
int factorsum(int num1, int num2)
{
int i, j, sum;
for (i = num1; i <= num2; i++)
{
sum = 0;
for (j = 1; j * 2 <= i; j++)
{
if (i % j == 0)
sum += j;
}
if (sum == i)
printf("%d是完全数\n", i);
}
printf("\n");
} 本帖最后由 睿嘻嘻嘻 于 2020-12-2 09:54 编辑
风过无痕1989 发表于 2020-12-1 22:44
下面两种求完数的方法,都是正确的,你分别试试
谢谢 谢谢各位 jitianmoshen 发表于 2020-12-1 23:05
while (scanf("%d%d", &m, &n) == 2)
请问,这个啥意思? 睿嘻嘻嘻 发表于 2020-12-2 09:52
while (scanf("%d%d", &m, &n) == 2)
请问,这个啥意思?
只要输入的两个数据都是%d,scanf的返回值就是2,其中只要有一个是字母,返回值就不等于2 哦哦,懂了,多谢啦!
页:
[1]