实验6-4 使用函数输出指定范围内的完数 (20分)

    技术2022-07-11  95

    本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

    函数接口定义:

    int factorsum( int number );

    void PrintPN( int m, int n );

    其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[m, n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。 

    #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 ) //判断是否是完数,返回number的因子和 { int i; int sum=0; if(number==1) sum=number; else for(i=1;i<=number/2;i++) { if(number%i==0) sum+=i; } return sum; } void PrintPN( int m, int n ) { int i; for(i=m;i<=n;i++) { if(factorsum(i) == i) { int j=1,k=0; printf("%d =",i); if(j==i==1) printf(" %d",i); while(j<i) //需要考虑一下输出的格式——完数 = 因子1 + 因子2 + ... + 因子k { if(i%j==0) { if(k==0) printf(" %d",j); else printf(" + %d",j); } k++; j++; } printf("\n"); } } if(i==n&&factorsum(i) != i) printf("No perfect number\n"); }

    提交结果是这样的——

    更改之后

    #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 ) //判断是否是完数,返回number的因子和 { int i; int sum=0; if(number==1) sum=number; else for(i=1;i<=number/2;i++) { if(number%i==0) sum+=i; } return sum; } void PrintPN( int m, int n) { int i; for(i=m;i<=n;i++) { if(factorsum(i) == i) { int j=1,k=0; printf("%d =",i); if(j==i==1) printf(" %d",i); while(j<i) //需要考虑一下输出的格式——完数 = 因子1 + 因子2 + ... + 因子k { if(i%j==0) { if(k==0) printf(" %d",j); else printf(" + %d",j); } k++; j++; } printf("\n"); } } if(factorsum(n) != n) printf("No perfect number\n"); }

    这次得到的提交结果也不是全对,

    最后,自己一条语句一条语句的看,改正之后就全对了。代码需要自己慢慢琢磨,通透了之后再去看看大神们的代码,修改自己的不足之处。

    最后附上自己的正确代码,欢迎大神指正!谢谢~

    #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 ) //判断是否是完数,返回number的因子和 { int i; int sum=0; if(number==1) sum=number; else for(i=1;i<=number/2;i++) { if(number%i==0) sum+=i; } return sum; } void PrintPN( int m, int n) { int i; for(i=m;i<=n;i++) { if(factorsum(i) == i) { int j=1,k=0; printf("%d =",i); if(j==i==1) printf(" %d",i); while(j<i) //需要考虑一下输出的格式——完数 = 因子1 + 因子2 + ... + 因子k { if(i%j==0) { if(k==0) printf(" %d",j); else printf(" + %d",j); } k++; j++; } printf("\n"); } } int cnt=0; for(i=m;i<=n;i++) { if(factorsum(i) == i) cnt++; } if(cnt==0) printf("No perfect number\n"); }

     

    Processed: 0.013, SQL: 9