总结:这个题目很简单,之所以发出来的目的是为了说明一个问题,就是有时候在代码逻辑没有问题的情况下在考试系统上面交不上去代码,那么问题有可能就是宏定义变量的范围问题了
题目内容:
如果有一正整数n,其真因数的总和等于n,则称之为完美数。
例如以下几个数都是完美数:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
求小于n的所有完美数.
输入描述
输入一个正整数n
输出描述
输出小于n的完美数,按升序输出,每个数据占一行
输入样例
10
输出样例
6
分析:这个题目就是要先将输入的数字的所有约数求出来,然后放入一个数组,如果这些约数的和正好
等于这个数本身,那么这个数就满足条件,计数的变量自加1
先看看我在vc上面编译通过的代码:
#include<stdio.h>
#define M 1000
int main()
{
int n;
int i,j,k = 0,l;
int a[M],b[M] = {0};
int sum = 0;
scanf("%d",&n);
for(i = 2;i < n; i++)
{
k = 0;
a[i] = i;
for(j = 1;j < a[i]; j++)
if(a[i]%j == 0)
{
b[k] = j;
k++;
}
for(l = 0;l < k; l++)
{
//printf("%d ",b[l]);
sum = sum + b[l];
}
//printf("\nsum = %d\n",sum);
//printf("\n");
if(sum == i)
printf("%d\n",i);
sum = 0;
}
return 0;
}
这个代码开起来没有问题,因为题目中的三个数字都可以显示出来,但是交到系统里面就不对了,为此我有仔细检查了问题~之后我只做了一个很小的改动,然后就ok了~~~
其实就是把#define M 1000改成了#define M 10000
哈哈哈~~~~