算法——花朵数

本文探讨了数学中的一种特殊数字——花朵数,这类数的特点是其每一位数字的位数次方之和等于该数字本身。例如,3^1 + 5^2 + 3^3 = 153就是一个典型的花朵数。文章将深入解析如何通过算法来寻找和验证这样的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

花朵数:花朵数是指一个数的各个位数的该数的位数次方相加等于该数本身

例: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值