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