Java\Scala\Python三种语言求解经典编程实例(一)——求水仙花数

三种语言求解经典编程实例,全部是在Linux下编码实现的。

配置参数文章: 快速配置Linux下的编程环境变量

Linux下运行Python的文章:

安装Python交互式数据处理工具——IPython

Linux下创建并执行python脚本


水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。
例如:1^3+5^3+3^3=153。
求100~999之间所有的水仙花数。


1、Java代码实现,这是最经典也是最实用的方式,编码风格严谨

import java.util.*;
public class ArmStrongNum{
        public static void main(String[] args){
                for(int i = 100 ; i <= 100000 ; i++){
                        if(isArmstrongNumber(i)){
                                System.out.println(i);
                        }
                }
        }

        public static boolean isArmstrongNumber(int n){
                List a = new ArrayList();
                int t = n;
                while ( t > 0){  // 循环找找到每一位数的值 个位 十位 百位
                        a.add(t % 10);
                        t /= 10;
                }
                int k = a.size(); //列表的长度即为幂次数
                int s = 0;
 
                for(int x : a){
                        s += Math.pow(x,k); //通过Math函数来求解幂
                }
                return s == n;  // 如果各位数的幂相加等于原数则返回true
        }
}


2、Scala代码实现,简洁明了,通过强大的map函数操作集合中的元素

import scala.collection.mutable._  //声明引用,可变长度的集合
object ArmStrongNum extends App{
        def isArmStrongNumber(n:Int):Boolean={
                val a = ArrayBuffer[Int]()
                var t = n
                while ( t > 0){  // 循环找找到每一位数的值 个位 十位 百位
                        a += t % 10
                        t = t/10.toInt
                }
                val k = a.length
                a.map(x => math.pow(x,k)).sum == n   //scala语言的特点,使用map函数分别操作集合元素,并求合
        }

        for ( x <- 100 to 100000)
                if (isArmStrongNumber(x)) println(x)
}

说明,执行scala代码的方式:

1、编译 

scalac ArmStrongNum.scala
2、执行编译结果

scala ArmStrongNum
需要配置classpath的指向

export  CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:.


或者使用 -cp 参数来指定 classpath的路径

scala -cp ./ ArmStrongNum



3、Python代码实现,直观易懂,最少的代码实现最优的解法,利用强大的列表解析功能简化代码

def isArmstrongNumber(n):
    a = []
    t = n
    while t > 0:  #循环找找到每一位数的值 个位 十位 百位
        a.append(t % 10)
        t /= 10
    
    k = len(a)

    return sum([x ** k for x in a]) == n  #Python语言的特点 列表解析


for x in range(100,100000):
    if isArmstrongNumber(x): print x


最后返回的结果三种语言求解都是一致的:

153
370
371
407
1634
8208
9474
54748
92727
93084


你可能感兴趣的:(JavaEE,数据分析挖掘,Spark)