水仙花数

/*
分析:
例:153=1^3+5^3+3^3
1、得到数字的每一位数;
2、得到数字的位数,从而决定次方;
3、若每一位位数次方之和等于原来的数值,则满足水仙花数的条件.
*/
#include <stdio.h>
#include <math.h> 
int GetPlace(int num)//得到数字num的位数,第2步
{
 int count=0;
 while( num!=0 )
 {
  count ++ ;   //循环次数与数字位数相等
  num/=10;   //每次循环整除一次减少一位,num=0,循环结束
 }
 return count ;   //将值返回给函数
}

int IsFlower(int num)  /*此函数思想:逆序输出每一位数,连乘位数次,累加求和 。第1步,若用顺序输出会将程序复杂化。*/
{
 int a;
 int b=GetPlace( num); //b为位数    
 int sum = 0;
 while(num!=0)  //逆序输出
 {
  a = num % 10 ;   //a接收每次求出的某一位数
  num /= 10 ;    // 每次循环整除一次减少一位,num=0,循环结束
  int i=1;
  int c=1;
  while(i <= b) //当循环次数i小于等于位数b时,跳出循环
  {
   c*=a; //连乘位数次

   i ++ ;
  }
  sum += c;  //累加
 }
 return sum;  //将累加的值返回给函数;由于循环结束后num=0,则在主函数中判断

}
int main()
{
 printf("100~10000内的水仙花数有 ");
 for(int num =100 ;num <= 10000;num++)
 {
  int sum=IsFlower( num );   //定义一个sum接收IsFlower函数返回的值
  if(sum==num)        //如果它们的位数方和与原来的数字相等,则它们是水仙花数,第3步
  {
   printf("%d ",num);
  }
  else
   continue;  //否则,直接进入下一次循环
 }
 return 0;
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值