【問題描述】編寫一個程序,輸入一個正整數N(N大於等於100小於等於999),求出100~N之間的所有水仙花數。所謂 的水仙花數是:如果一個三位數的個位數、十位數、百位數的立方和等於該數自身,就稱這個數為水仙花數。
【輸入形式】輸入一個正整數N。
【輸出形式】輸出從100到N之間的所有水仙花數,每個數以回車結束。
【樣例輸入】
400
【樣例輸出】
153
370
371
【樣例說明】輸入一個的正整數400,輸出為100~400之間的水仙花數153,370,371
-------------------
個人代碼:
#include <stdio.h> void geteach(int n,int *a){ int i; for(i=0;i<3;i++){ a[i] = n%10;//a[0]為最低位 n/=10; } } void check(int n,int *a){ int i,sum=0; for(i=0;i<3;i++){ sum = sum + a[i]*a[i]*a[i]; } if(sum == n) printf("%d\n",n); } int main(){ int num,i,a[3]; scanf("%d",&num); for(i=100;i<=num;i++){ geteach(i,a); check(i,a); } getchar(); return 0; }
標答:
#include <stdio.h> int test(int num); #define threetimes(n) ((n)*(n)*(n)) main() { int i,max,shui[1024],j; scanf("%d",&max); for(i=153,j=0;i<=max;i++) { if(test(i)==1) { shui[j]=i; j++; } } for(i=0;i<j;i++) { printf("%d\n",shui[i]); } } int test(int i) { int ge,shi,bai,lifanghe; ge=i%10; shi=(i%100-ge)/10; bai=(i-shi*10-ge)/100; lifanghe = threetimes(ge)+ threetimes(shi)+ threetimes(bai); if (lifanghe == i) { return 1; } else { return 0; } }
--------------------
1、用宏定義來精簡代碼
#define threetimes(n) ((n)*(n)*(n))
2、自己寫的代碼中嘗試使用函數調用,並以數組為形參。
函數聲明:void geteach(int n,int *a){...;...;}
函數調用:geteach(i,a);
其中a[3]為int型數組
