scala:查询圆周率pi
pi.txt保存了圆周率,精确到小数点后100万位。
import scala.io.Source
object PiUtil {
private val filename = "bin/pi.txt"
private val bs = Source.fromFile(filename)
private val pi_str = bs.getLines.mkString
bs.close
def main(args: Array[String]): Unit = {
find("2345678") //查询数字串2345678在圆周率中位置
show(995998, 10) //从圆周率小数点后995998位开始,显示10位
}
/*
* 查询给定数字串在圆周率中的位置,打印出其前后的数字
*/
def find(find_str: String) {
var idx = pi_str.indexOf(find_str)
if(idx == -1){
println("在前100万位中未找到")
}
while (idx != -1) {
val loc = idx - 1
val dlt = 5 //显示要查找数字串前后多余位数
val bef = get(loc - dlt, dlt)
val mid = get(loc, find_str.length)
val aft = get(loc + find_str.length, dlt)
println(s"index: $loc\t|${Seq(bef, mid, aft).mkString("\t")}")
idx = pi_str.indexOf(find_str, idx + 1)
}
}
/*
* 返回pi指定小数位数、指定长度的数字串
*/
def get(bg: Int, len: Int) = {
require(len > 0, "len must > 0")
val res = pi_str.slice(bg + 1, bg + len + 1)
res
}
/*
* 打印pi指定小数位数、指定长度的数字串
*/
def show(bg: Int, len: Int) = {
val res = get(bg, len)
println(res)
}
}