水仙花数(自恋数)
/************************************************************
*设计一个函数找出水仙花数。水仙花数是指一个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; }
运行结果: