天天看点

JAVA程序中的 水仙花

在程序中,有一种名叫水仙花的玩意儿,这东西我在刚听说的时候一脸懵逼,不知道是啥东西,不过,了解后才知道,就是 一种利用基本类型int运算规则的一种方式

何为水仙花?拿3位数的来说吧

比如  153 是一个三位数的值 ,那么,判断它是否为水仙花数的算法为

153 = 1^3 + 5^3+ 3^3 (也就是:153 = 1*1*1 + 5*5*5 + 3*3*3)

那么,在JAVA中如何计算是否为水仙花数呢?其实,要只把这个数值的个位、十位、百位分别取出来,基本就做出来了,但这里有个问题,如何取出一个值的各个位数?

拿153 来说

================================================================================================================

获取个位数,这个比较简单,只须要把值除以10取余就可得出:

int one = 153%10;

-----------------------------------------------------------------------------------

获取十位数,这个相对来说就麻烦一点,首先你要考虑十位要咋取?除100取余 得到的是53,并不能得到5,除以10取余更不行了,因为取到的是3(上面已经用过了),其实,取得十位上的值,都 是基础中已经讲到的,这里运用了int的除法运算。

int two = 153%100;  //这时,得到的是53,那么进行下一步,获取十位上的5

two = two / 10; //这时,得到的就是5了,至于为什么,是因为int与int进行运算数,会舍弃小数位,只取整数部分,53/10 = 5.3,取整数部分就是5

-------------------------------------------------------------------------------------

获取百位上的数字就更简单了,也是利用了int与int进行运算数,得出的值只取整数部分的规则

int three = 153 / 100;//这时,得出的就是1了。

===============================================================================================================

其实,只要把值的每个位数取出,就已经将水仙花完成了60%,剩余的就是进行验证了,

比如一个简单的水仙花验证:取100 ~ 1000之间的水仙花数

代码如下:

public static void main(String[] args){
		int i = 100;
		do{
			int one = i % 10;
			int two = (i%100)/10;
			int three = i/100;
			if((one*one*one+two*two*two+three*three*three) == i){
				System.out.println(i);
			}
			i++;
		}while(i < 1000);
	}
           

结果:

153

370

371

407

当然,

(one*one*one+two*two*two+three*three*three)            
也可以使用
           
Math.pow(one,   3) +Math.pow(two,   3)+Math.pow(three,   3) 代替