【问题描述】输入若干个正整数,以-1表示结束。输出这些整数中约数(包括1和自身)最多的整数及其约数个数,两者之间用一个空格隔开。数量相同,输出后输入的整数。要求子函数getCount实现计算一个正整数的约数个数。
【输入形式】 【输出形式】 【样例输入】17 5 -1
【样例输出】5 2
【样例说明】输出中5和2之间一个空格,2之后一个换行
#include <stdio.h>
#include <stdlib.h>
int getCount(int m);
int main()
{
int max, x, n,r;
scanf("%d", &n);
x = n;
r = getCount(n);
max = r;
do {
scanf("%d", &n);
r = getCount(n);
if (max <= r) {
max = r;
x = n ;
}
else {
max = max;
}
} while (n != -1);
printf("%d %d", x,max); /*不要把x错写成n*/
return 0;
}
int getCount(int m)
{
int count, i;
count = 0;
for (i = 1; i <= m; i++) {
if (m % i == 0) {
count++;
}
}
return count;
}
问题:如何输出约数最多的那个数。
解决:参考求最大值最小值的方法。先把n的值赋给未知数x,同时
令max为getCount(n) (即n的约数的个数),再循环比较。
如果有一个数的约数更多,则将此数赋给x,最后输出x。