c0301_求100~N之間所有水仙花數(個、十、百位數的立方和等於該數自身)


【問題描述】編寫一個程序,輸入一個正整數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型數組


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM