您的位置:首页 > 其它

计算出从1到100之间所有奇数的平方之和,scala

2014-07-29 20:32 483 查看
最近开始学scala语言,现在手里有本programming in scala 的中文和英文电子书,但是中文不全(1~13 )算是入门吧,全英文的,看了几眼就晕头转向的了。求大神们翻译下半部吧。

昨天加了两个scala 的QQ群,今天看到一个加群做题的须知,代码作为入群密码。

题目:计算出从1到100之间所有奇数的平方之和

提示:即1*1 + 3*3 +5*5 + ... + 99*99,结果为166650

要求scala代码的长度不超过50个字符,代码越简洁易读越好。

兴趣一来,写了两个实现,但结果均超出50个字符,希望有人返馈更简洁的方法。

package com.scala.exmple

object Odd {

//Java习惯for循环实现100以内奇数的平方相加求和

// def s(x: Int)=x * x

// private var c = 0

// def sum(n: Int):Int ={

// for(i <- 1 to n)

// if(i % 2 != 0)

// c += s(i)

// c

// }

//for循环实现100以内奇数的平方相加求和

def s(x: Int)=x * x

private var c = 0

def oldOddSum(n: Int): Int={

for(i <- 1 to n;if(i % 2 != 0))

yield c += s(i)

c}

//递归实现100以内奇数的平方相加求和

def oddSum(x: Int): Int =

if(x == 1) 1

else if (x % 2 == 0) oddSum(x - 1)

else x * x + oddSum(x - 1)

def main(args: Array[String]): Unit = {}

println(oldOddSum(100))

println(oddSum(100))

}

---------------------------------------<<续

这是群里高手给出的,只用了34个字符

println((1 to 99 by 2).map(x => x * x).sum)

但我修改了下,更容易理解,但是用了50个字符,算是达标了。

val odd100=(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum

println(odd100)

println("(for(i<-1 to 100;if(i%2!=0))yield i*i).map(+_).sum".length)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐