C语言程序设计(第三版)何钦铭著 习题6-3
题目
使用函数输出指定范围内的完数∶
输入两个正整数 m 和 n(1≤m,n≤1 000),输出m ~n之间的所有完数,完数就是因子和与它本身相等的数。
要求定义并调用函数 factorsum(number),它的功能是返回 number 的因子和。
例如,factorsum(12)的返回值是 16 (1+2+3+4+6)。试编写相应程序。
分析过程
输入
条件:输入两个正整数 m 和 n(1≤m,n≤1 000)
输出
条件:输出m ~n之间的所有完数,完数就是因子和与它本身相等的数。
要求定义并调用函数 factorsum(number),它的功能是返回 number 的因子和。
代码
#include <stdio.h>
#include <math.h>
int factorsum(int number);
int main(void) {
/*定义变量*/
int m, n; /*存储输入的正整数m以及n*/
int count = 0;/*存储m-n之间的完数个数*/
/*赋值*/
printf("请输入正整数m以及n:\n"); /*输入提示*/
scanf("%d %d \n", &m, &n); /*输入并赋给变量*/
for(int i=m; i<=n; i++){
int yinzihe = factorsum(i);
if(yinzihe == i){ /*i为完数*/
printf("%d为完数\n", i); /*输出完数*/
count++;
}
}
if(count==0) printf("%d-%d之间无完数", m , n); /*没有完数,做一个提示*/
return 0;
}
int factorsum(int number){
int sum = 0;
if(number==1) return number;/*如果number为1,直接返回因子和1*/
for(int i=1; i<=number/2; i++){
if(number%i==0)/*判断当前i是否为number的因子*/
sum+=i;/*若为因子和,则加至sum变量上*/
}
return sum;
}
运行结果