三种语言求解经典编程实例,全部是在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<Integer> a = new ArrayList<Integer>(); 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.scala2、执行编译结果
scala ArmStrongNum需要配置classpath的指向
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:.
或者使用 -cp 参数来指定 classpath的路径
scala -cp ./ ArmStrongNum
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