C程序设计(第五版) 课后习题 5.9
第五章 循环结构
空间限制:16MB时间限制:1s总提交数:3841通过率:35.82%题目来源: C程序设计(第五版)-谭浩强
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出N之内的所有完数,并严格按下面格式输出其因子:
6 its factors are 1 2 3
N
找出1~N之间所有的完数,并输出,完数的输出为每行一个,格式请按上述格式进行输出。如 1000 以内所有的完数有3个。则输出格式如下:
6 its factors are 1 2 3
** its factors are * * * * **
…
注意要个最后列表每两个数之间要有一个空格,最后不能有空格
6
6 its factors are 1 2 3
这道题有两种解法,但第一种运算速度较慢,不能通过,需要使用第二种方法是可以通过。
第一种
#include <stdio.h>
int main(void)
{
int N;
int n;
int i;
int sum;
int b;
while(scanf("%d", &N)!=EOF)
{
for (n = 1; n <= N; n++)
{
sum = 0;//每次都必须初始化
for (i = 1; i < n; i++)
{
if (n%i == 0)
sum += i;//因子加和
}
if (n == sum)
{
printf("%d its factore are ", n);
for (i = 1,b=1; i < n; i++,b++)//输出因子
{
if (n%i == 0)
printf("%d", i);
if(b<n-1)
{
printf(" ");
}
}
printf("\n");
}
}
}
}
#include<stdio.h>
int main(){
int n,i,fator,sum;
scanf("%d",&n);
for(i=2;i<=n;i++){
sum=1;
for(fator=2;fator<=i/2;fator++){
if(i%fator == 0)
sum+=fator;
}
if(sum == i){
printf("%d its factors are 1",i );
for(fator=2;fator<=i/2;fator++){
if(i%fator == 0)
printf(" %d",fator);
}
printf("\n");
}
}
return 0;
}
题目来源 广东技术师范大学在线判题网站http://www.gpnuacm.com/#/home