输入正整数n(n>1),编程找出n以内的所有完数并输出其因子。
输入格式:1000
输出格式:6(1,2,3);28(1,2,4,7,14);496(1,2,4,8,16,31,62,124,248);(注意:式子中所有符号均为英文状态下的符号)
*/
程序代码:#include<stdio.h>
main()
{
int n,i,j,k=0,sum=0,a[100];
printf("请输入一个数字\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=0;
k=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
a[k++]=j;
sum+=j;
}
}
if(sum==i)
{
printf("%d",j);
printf("(");
while(k--)
printf("%d, ",a[k]);
printf(")");
printf("\n");
}
}
printf("\n");
}
程序代码:#include<stdio.h>
int main()
{
int i, j;
int sum;//求所有因子的和
int n;//输入一个数的范围 比如:1000
int count,count1;//count 用于控制某个数的因子的个数 count1用于计数
scanf("%d",&n);
for (i = 2; i <= n; i++)//首先排除输出没有1 可以直接略去
{
count1 = 0;
count = 0;
sum = 0;//这三个赋值为0 的是每次循环数时重新赋值
for (j = 1; j < i; j++)
{
if (i % j == 0)
{
sum += j;//计算因子的和
count++;//计算因子的个数
}
}
if (sum == i)//当因子的和等于它对应的数时 才开始下面
{
printf("%d(",sum);
for (j = 1; j < sum; j++)
{
if (sum % j == 0)
{
printf("%d",j);
count1++;
if (count1 == count)//为什么要计个数呢?主要是对最后一个格式的输出 不然多了 ,
{
printf(");");
break;
}
printf(",");
}
}
}
}
return 0;
}谢谢!!!
