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)
    }
    
}
posted @ 2018-12-29 09:04  xuejianbest  阅读(724)  评论(0编辑  收藏  举报