求小于n的自然数中约数和最大数的C语言程序编写求助
解决方案
要完成这个作业,你需要把单个数字的约数查找逻辑封装成计算约数和的函数,然后遍历所有小于输入n的自然数,对比它们的约数和,找出最大值对应的数。以下是完整实现:
完整代码
#include <stdio.h> // 计算一个数的所有真约数之和(真约数:小于该数且能整除它的数) int sum_of_divisors(int num) { int sum = 0; for (int i = 1; i < num; i++) { if (num % i == 0) { sum += i; } } return sum; } int main() { int n; printf("Input an integer: "); scanf("%d", &n); // 处理边界情况:n=1时没有小于它的自然数 if (n <= 1) { printf("No valid number exists.\n"); return 0; } int max_sum = 0; int result_num = 1; // 遍历所有小于n的自然数 for (int i = 1; i < n; i++) { int current_sum = sum_of_divisors(i); // 如果当前数的约数和更大,更新最大值和对应的数 if (current_sum > max_sum) { max_sum = current_sum; result_num = i; } } printf("The number with the largest sum of divisors less than %d is: %d\n", n, result_num); return 0; }
代码说明
sum_of_divisors函数:接收一个整数num,遍历从1到num-1的所有数,累加能整除num的数,返回最终的约数和。- 主函数逻辑:
- 先处理边界输入(比如
n=1时没有符合要求的自然数) - 初始化
max_sum(记录当前找到的最大约数和)和result_num(记录对应数) - 遍历1到
n-1的每个数,计算其约数和,若大于当前max_sum则更新记录 - 最后输出结果
- 先处理边界输入(比如
测试示例
输入10时,程序会计算每个数的约数和:
- 1: 1
- 2: 1
- 3: 1
- 4: 1+2=3
- 5: 1
- 6: 1+2+3=6
- 7: 1
- 8: 1+2+4=7
- 9: 1+3=4
最大约数和为7,对应的数是8,与题目示例一致。
内容的提问来源于stack exchange,提问作者ThomasMarkoW
相关产品推荐
相关产品推荐

