欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

习题6-3 使用函数输出指定范围内的完数

程序员文章站 2022-06-07 14:38:59
...

前言

这个题目有点麻烦,判断是否为完数的函数,很快就把程序写下来了,但是对于输出那种格式我想了好一会儿。最后写出来代码有点长(嵌套多不易读)还是技术不行啊,结果都能输出但是PTA的编译器还是报错,做个参考,不知道原因。。。

正文

习题6-3 使用函数输出指定范围内的完数习题6-3 使用函数输出指定范围内的完数
代码一(无法通过)
想看正确答案,请直接跳过至代码二

#include <stdio.h>

int factorsum( int number );
void PrintPN( int m, int n );
	
int main()
{
    int i, m, n;

    scanf("%d %d", &m, &n);
    if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
    if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
    PrintPN(m, n);

    return 0;
}

/* 你的代码将被嵌在这里 */
int factorsum( int number )
{
	int i,j,mul,f,s[1000];
	int sum=0;
	f=0;
	for(i=1;i<=number;i++){
		for(j=1;j<=number;j++){
			mul=i*j;//循环相乘 
			if(number==1)
				s[f++]=i;
			else if(number==mul&&i!=number)
				s[f++]=i;
		}
	}
	s[f]='\0';
	for(f=0;s[f]!='\0';f++){
		sum=sum+s[f];
	}
	return sum;
}
void PrintPN( int m, int n )
{
	int i,j;//两个因子 
	int mul,f,count; 
	count =0;
	int s[1000];//用于存储因子 
	for(;m<=n;m++){
		f=0;
		if(factorsum(m)==m){
			count++;//记录完数个数
			for(i=1;i<=m;i++){
				for(j=1;j<=m;j++){
					mul=i*j;//循环相乘
					if(m==1)//特殊情况,输入的是1 
						s[f++]=i;
					else if(m==mul&&i!=m)
					    s[f++]=i;
				}
				s[f]='\0';
			}
			printf("%d = ",m);
		    for(f=0;s[f]!='\0';f++){
				printf("%d ",s[f]);
				if(s[f+1]!='\0')//最后一个不要加号 
			       printf("+ "); 
				   s[f]=0; 
		    }
			 putchar('\n');
		}
	}
	if(!count) printf("No perfect number");
}

习题6-3 使用函数输出指定范围内的完数习题6-3 使用函数输出指定范围内的完数
习题6-3 使用函数输出指定范围内的完数
代码二

int factorsum(int number) { //判断number是否为完数
    int i, sum = 0;	
    if (number == 1) return 1;
    for (i = 1; i < number; i++) {//不包含自身不能用<=
        if (number % i == 0) {
            sum = sum + i;
        }
     }
    return sum;
}
void PrintPN(int m, int n) {
    int i, j, count = 0;
    for (i = m; i <= n; i++) {
        if (factorsum(i) == i) {
        count++;   // count用来计数,表示完数的个数
        printf("%d = ", i);
        if (i == 1) printf("1");//特殊情况1
            for (j = 1; j < i; j++) {
                if (i % j == 0) //判断是不是因子
                {
                    printf("%d", j);
                        if (j == i / 2)    //判断加到最后一位数时,无加号
                            break;
                        printf(" + ");
                }
            }
            printf("\n");
    }
 }
    if (!count) printf("No perfect number");
}
相关标签: PTA题集