#習題6-3 使用函式輸出指定範圍內的完數
阿新 • • 發佈:2019-02-19
習題6-3 使用函式輸出指定範圍內的完數(20 分)
本題要求實現一個計算整數因子和的簡單函式,並利用其實現另一個函式,輸出兩正整數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;
}
/* 你的程式碼將被嵌在這裡 */
輸入樣例1:
1 30
輸出樣例1:
1 is a perfect number
1 = 1
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
輸入樣例2:
7 25
輸出樣例2:
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 ){ int i=0,ret = 0; if(number==1){ return number; } //判斷數number是否為完數 for(i=1; i<number; i++){ if(number%i == 0){ ret += i; } } //如果是完數,返回因子和 if(ret == number){ return ret; } else return 0; } void PrintPN( int m, int n ){ int i,j; int count = 0; //count作為是否有完數的標誌 //遍歷m-n找出所有的完數 for(i=m; i<=n; i++ ) { //如果i是完數,則打印出它的因子和形式 if(factorsum(i)!=0){ int ret = 0;//ret出迴圈自動銷燬 count++; printf("%d = ",i); if(i==1){ printf("%d",i); } for(j=1; j<i; j++){ if(i%j == 0){ printf("%d",j); ret += j; //判斷是否結束的標誌是左右式子是否相等 if(ret != i){ printf(" + "); } } } printf("\n"); } } if(count==0){ printf("No perfect number"); } }