[TOC]
【program】 打印水仙花数(daffodil)
求出0~100000之间的所有“水仙花数”并输出。
【Tips】“水仙花数”是指一个3位数,其各位数字的3次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
【analysis】分析
又称 阿姆斯特朗数。
∵ daffodil numbers points at三位数,各位上的数字的3三次方之和恰好等于该数本身
∴ 我们可以根据除法和取余运算求出各位上的数字,再求出各位数字三次方并求和。最后比较是否等于该数本身。
仅针对水仙花数(三位数)进行打印
解法一:暴力解题(daffodil)
#include <stdio.h>
#include <math.h>
int main(){
// way one
void daffodil();
return 0;
}
// waay one
void daffodil(){
int a,b,c; //
for(int i=0;i<1000;i++){
a=i/100;
b=/10%10;
c=i%10;
// 改进 可引入 pow(x,y) (库函数 <math.h>)
// pow(a,3) +pow(b,3) +pow(c,3) == i
if(i == a*a*a+b*b*b+c*c*c){
printf("%d \n",i);
}
}
}
本题目严格的说是求解0-10000中的自幂数
水仙花数只是[自幂数] 的一种,严格来说3位数的3次幂数才称为水仙花数。 水仙花数又称阿姆斯特朗数。
附加:
附:其他位数的自幂数名字
一位自幂数:独身数
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477;
九位的九九重阳数共有4个: 146511208,472335975,534494836,912985153;
十位的自幂数只有1个:4679307774
解法二:破题方法(自幂数)
在了解了以上基础内容之后,再次查看题目要求使用编程思维求解该题;
求出0~100000之间的所有“水仙花数”【自幂数】并输出
#include <stido.h>
#include <math.h>
int main(){
void daffodil2();
return 0;
}
void daffodil2(){
for(int i=0;i<100000;i++){
// 先求解是几位数
int count = 0;
int tmp=i;
while(tmp !=0){
// tmp 123
// 1 123
// 2 123/10= 23
// 3 23/10=2
// 2/10=0,所以count=3 123是三位数,次方数为3
count++;
tmp /= 10;
}
// 求解各位上的数字,并求和
int tmp=i;
while(tmp !=0){
// tmp 123
// 123%10 == 3
// 12 % 10 == 2
// 1%10 == 1
sum+=pow(tmp%10,count);
tmp/=10;
//tmp 123
// tmp /10 123/10=12
// 12 / 10 == 1
}
// 判断是否相等
if (i== sum){
printf("%d \n",i);
}
}
}