水仙花数(自恋数)

/************************************************************
*设计一个函数找出水仙花数。水仙花数是指一个n位数
*如:3位水仙花数:153=1^3 + 5^3 +3^3
*    4位水仙花数:1634=1^4 +6^4 + 3^4 +4^4
*请问如何用C++实现?【美国著名软件企业GS公司2007年11月面试题】
**************************************************************/

下面是自己用c写的一个代码,程序员面试宝典P91~~~有C++实现。

#include<stdio.h>
#include<stdlib.h>

int a[100];
int Find_Num(int max);

int main()
{    
    int max_number;
    printf("please input the max number:");
    scanf("%d",&max_number);
    Find_Num(max_number);
    
    //打印输出
    printf("%d\t",a[0]);
    for(int i=1;i<max_number&&a[i]!=0;i++)
            printf("%d\t",a[i]);
    printf("\n");
    return 0;
}


int Find_Num(int max)
{    
    int m=0;
    for(int num=0;num<max+1;num++)
    {
        int n=0; //num的位数

        //计算num的位数
        int tmp=num;
        do
        {
            n++;
            tmp/=10;
        }while(tmp);

        //存储num各位的数字
        int* wei=(int*)malloc(n*sizeof(int)); 
        if(wei==NULL)
            return 0;
        int k=n-1,t_num=num;
        while(k>=0)
        {
            wei[k--]=t_num%10;
            t_num/=10;
        }    

        //判断是否为水仙花数
        int* multi=(int*)malloc(n*sizeof(int)); 
        if(multi==NULL)
            return 0;
        for(int x=0;x<n;x++)
        {
            multi[x]=1;
        }
        int sum=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
                multi[i]*=wei[i];
            sum+=multi[i];
        }
        if(sum==num)
            a[m++]=num;
    }
    return 1;
}

 

运行结果:

 

 

 

 

 

 

posted on 2013-08-31 10:37  大浪 淘沙  阅读(773)  评论(0编辑  收藏  举报

导航