花朵数:花朵数是指一个数的各个位数的该数的位数次方相加等于该数本身
例:153=1^3+5^3+3^3
基本思路:花朵数需要各个位数 我们就需要将各个位数的值求到,并且存放在一个数组
中方便下次使用
得到了数组后我们根据花朵数的特性判断其是否为花朵数
如果是花朵数我们还可以判断它是什么样的花朵(有几片花瓣 也就是几位数)
#include <stdio.h>
#include <math.h>
#define N 10
void flower(int n)
{
int i; //i用于数组的循环
int m=n; //用m记录n的数值
double total=0;
int record=0; // 记录位数
int arr[N]; // 创建数组记录各个位数
while(n!=0) //将各个位数 存放在数组中
{
arr[record]=n%10;
n=n/10;
record++;
}
printf("这是一个%d位的数\n",record);
for(i=0;i<record;i++)//将各个位数的n次方加起来
{
total=total+pow(arr[i],record);
}
if(total==m) //判断是否为花朵数
{
printf("这是一个花朵数\n");
switch(record) //判断是什么样的花朵数
{
case 3: printf("这是水仙花数\n");
break;
case 4: printf("这是虞美人\n");
break;
case 5: printf("这是梅花数\n");
break;
case 6: printf("这是雪花数\n");
break;
default:printf("不知道是什么花\n");
break;
}
}
else
{
printf("这不是花朵数\n");
}
}
int main()
{
int num;
printf("请输入一个数:\n");
scanf("%d",&num);
flower(num);
return 0;
}
#include <math.h>
#define N 10
void flower(int n)
{
int i; //i用于数组的循环
int m=n; //用m记录n的数值
double total=0;
int record=0; // 记录位数
int arr[N]; // 创建数组记录各个位数
while(n!=0) //将各个位数 存放在数组中
{
arr[record]=n%10;
n=n/10;
record++;
}
printf("这是一个%d位的数\n",record);
for(i=0;i<record;i++)//将各个位数的n次方加起来
{
total=total+pow(arr[i],record);
}
if(total==m) //判断是否为花朵数
{
printf("这是一个花朵数\n");
switch(record) //判断是什么样的花朵数
{
case 3: printf("这是水仙花数\n");
break;
case 4: printf("这是虞美人\n");
break;
case 5: printf("这是梅花数\n");
break;
case 6: printf("这是雪花数\n");
break;
default:printf("不知道是什么花\n");
break;
}
}
else
{
printf("这不是花朵数\n");
}
}
int main()
{
int num;
printf("请输入一个数:\n");
scanf("%d",&num);
flower(num);
return 0;
}