编写C程序,从键盘先后输入两个不大于9999的正整数m和n(用逗号分开),若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数,输出也用逗号分隔。
时间: 2024-03-24 11:40:47 浏览: 88
好的,以下是符合您要求的C语言程序:
```c
#include <stdio.h>
// 求一个数的所有因子之和
int sumOfFactor(int num) {
int sum = 1; // 1 一定是因子
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
int m, n;
scanf("%d,%d", &m, &n);
// 如果m比n大,则交换两数
if (m > n) {
int temp = m;
m = n;
n = temp;
}
// 遍历m~n之间的所有数
for (int i = m; i <= n; i++) {
if (sumOfFactor(i) == i) { // 如果因子之和等于这个数本身,则是完数
printf("%d,", i);
}
}
return 0;
}
```
程序首先从键盘输入两个数m和n,如果m比n大,则交换两数。然后遍历m~n之间的所有数,对于每个数,我们调用`sumOfFactor`函数求出其所有因子之和,如果因子之和等于这个数本身,则说明这个数是完数,我们就输出它。最后输出的完数之间用逗号分隔。
相关问题
从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n之间的所有完数用C语言
完数是指一个数恰好等于它的因子之和(不包括它本身)。例如,6是一个完数,因为6=1+2+3。
以下是实现代码:
```c
#include <stdio.h>
int main() {
int m, n, i, j, sum;
printf("请输入两个不大于9999的正整数m和n:\n");
scanf("%d%d", &m, &n);
if (m > n) {
int temp = m;
m = n;
n = temp;
}
printf("%d到%d之间的完数有:\n", m, n);
for (i = m; i <= n; i++) {
sum = 0;
for (j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
程序先读入两个整数m和n,如果m>n则交换两数,接着从m到n逐个检查每个数是否为完数,如果是则输出。
从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。使用c语言
#include<stdio.h>
int isPerfect(int n) { // 判断n是否为完数
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
if (sum == n) {
return 1;
} else {
return 0;
}
}
int main() {
int m, n;
scanf("%d%d", &m, &n);
if (m > n) { // 交换m和n
int temp = m;
m = n;
n = temp;
}
for (int i = m; i <= n; i++) { // 遍历m~n之间的数
if (isPerfect(i)) {
printf("%d ", i);
}
}
return 0;
}
阅读全文