类水仙花数检测

相信所有编程语言的初学者都会做过这样一道题:
求出所有“水仙花"数并输出,水仙花数是指一个三位数,其各位数字的立方和确好等于该数本身,如153=111+555+333.
实际上,水仙花数属于自幂数的一种,即各位数的位数次幂和等于本身。
不同位数的自幂数也有不同的名称
在这里插入图片描述
一般我们会建立一个循环遍历100到999,然后将个十百为拆分然后检测。

for(int 1=100;i<1000;i++){	

   int gw=i%10;		//存放个位数
   int sw=i%100/10;		//存放十位数
   int bw=i/100;		//存放百位数
  if(i==(gw*gw*gw+sw*sw*sw+bw*bw*bw)){
   System.out.println(i);
  }

完成程序我就想,为什么不直接实现求自幂数?不限定位数,比如求出0~9999999的所有自幂数。
为了完成这个小目标,我们需要理清思路。
输入任意一个数字n,我们首先要确定它的位数,便于之后的计算判定。

int tmp=n;		
int count=0;			//位数计数器
while(tmp!=0){
	count++;
	tmp=tmp/10;
}

这样可以的到该数的位数count,然后是确定每一位上的数并计算幂数和。

int sum=0			//存放次幂和
tmp=n;
while (tmp != 0) {
    sum = sum + (int)Math.pow(tmp%10,count);   // Math.pow(a,b);  a^b
    //Math.pow(a,b)函数中,参数a,b均为double类型,需强制转换
     tmp = tmp/10;
            }

最后进行判断

if(sum == n)
 {
       System.out.println(i);
 }

完整代码如下

  public static void waterFlower(int n) {
        for (int i = 0; i <= n; i++) {
            int sum = 0;//保存每一位数字的次方和
            int count = 0;//记录当前数字的位数
            int tmp = i;
            //求i是几位数
            while (tmp != 0) {
                count++;//1  2 3
                tmp = tmp/10;//12  1  0
            }
            tmp = i;
            //求tmp的每一位上的数字  123
            while (tmp != 0) {
                sum = sum + (int)Math.pow(tmp%10,count);
               // Math.pow(a,b);  a^b
                tmp = tmp/10;
            }
            if(sum == i) {
                System.out.println(i);
            }
        }
    }

这样只要在主函数中调用函数waterFlower()并输入最大范围值n即可得到范围内的自幂数了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值