欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二十一:拓展水仙花

程序员文章站 2024-03-18 13:09:52
...
问题 : 拓展水仙花
题目描述

有一种数字叫:水仙花数。比如:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。 
现在,有一种拓展的水仙花数。 
不仅仅是每位数每位数字的3次方和了,如果这个数字总共有N位的话,则是“每位数字的N次方和”。 
eg:54748=5*5*5*5*5+4*4*4*4*4+7*7*7*7*7+8*8*8*8*8+4*4*4*4*4
现在要给你一个数X。需要你给出在所有X位数中,存在的拓展水仙花数分别是什么。从小到大输出。
输入
一个数字X表示位数(x<=6)。
输出
X位数中哪些是拓展水仙花数。从小到大,每行一个
样例输入
4
样例输出
1634
8208

9474

方法一:

#include<stdio.h>
#define fr(i,n,m) for(i=n;i<m;i++)
int fun(int n,int m){
	int sum=1;
	for(int j=0;j<n;j++){
		sum*=m;
	}
	return sum;
}
int main(){
	int n,a,b,i;
	int k,sum,p;
	scanf("%d",&n);
	switch(n){
		case 1:a=1,b=10;break;
		case 2:a=10,b=100;break;
		case 3:a=100,b=1000;break;
		case 4:a=1000,b=10000;break;
		case 5:a=10000,b=100000;break;
		case 6:a=100000,b=1000000;break;
	}
	fr(i,a,b){
		k=a;
		p=i;
		sum=0;
		while(k){
			sum+=fun(n,p/k);
			p=p%k;
			k=k/10;
		}
		if(sum==i){
			printf("%d\n",i);
		}
	}

}
方法二:

#include<stdio.h>
#include<math.h>
int fun(int n,int m){
	int sum=1;
	for(int j=0;j<n;j++){
		sum*=m;
	}
	return sum;
}
int main(){
	int a,b,n,sum,p;
	scanf("%d",&n);
	for(int i=pow(10,n-1);i<pow(10,n);i++){
		a=pow(10,n-1);
		p=i;
		sum=0;
		while(a){
			sum+=fun(n,p/a);
			p=p%a;
			a=a/10;
		}
		if(sum==i){
			printf("%d\n",i);
		}
	}
	
} 



相关标签: c语言实现