scala习题(二)

scala习题训练之reverse


package com.zyc.scala.test

import scala.concurrent.duration.DoubleMult

/**
* Created with IntelliJ IDEA.
* Author: zyc2913@163.com
* Date: 2020/9/22 14:38
* Version: 1.0
* Description:习题训练
*/
object Test2 {
  def main(args: Array[String]): Unit = {

    /**
     * 1、一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值
     */
    def signum(num:Int): Unit ={
      if (num > 0) println(1)
      else if (num < 0) println(-1)
      else println(0)
    }
    //调用函数
    signum(10) //1

    /**
     * 2、一个空的块表达式{}的值是什么?类型是什么?
     * 值是(),类型是unit
     */
    val s: Unit = {}
    println(s) //()

    /**
     * 3、针对下列Java循环编写一个Scala版本:
     * for(int i=10;i>=0;i–)System.out.println(i);
     *
     * 也可以这样(0到10翻转):for (i <- 0 to 10 reverse ) println(i)
     */
    //复制该段代码,可以自动转换成scala版本如下:输出结果是:10 9 8 7 6 5 4 3 2 1 0
    //从10到0直到-1(不含-1)
    for (i <- 10 to 0 by -1) println(i)  //10 9 8 7 6 5 4 3 2 1 0

    /**
     * 4、编写一个过程countdown(n:Int),打印从n到0的数字
     * reverse的作用是翻转
     */
      def countdown(n:Int): Unit = {
        for ( i <- 0 to n reverse) println(i)
      }
    //调用函数
      countdown(6)  // 6 5 4 3 2 1 0

    /**
     * 5.编写一个for循环,计算字符串中所有字母的Unicode代码(toLong方法)的乘积。
     * 举例来说,"Hello"中所有字符串的乘积为9415087488L
     */
    var t :Long = 1L
    for (i <- "Hello"){
      t = t * i.toLong
    }
    println(t)  //9415087488

    /**
     * 6、同样是解决前一个练习的问题,请用StringOps的foreach方式解决。
     */
    var x : Long = 1L
    "Hello".foreach(x *= _.toLong)
    println(x)  //9415087488

    /**
     * 7、编写一个函数product(s:String),计算字符串中所有字母的Unicode代码(toLong方法)的乘积
     *
     */
    def product(str:String): Unit ={
      var t : Long = 1L
      for (i <- str){
        t = t * i.toLong
      }
      println(t)  //9415087488
    }
    //调用函数
    product("Hello")

    /**
     * 8、把7练习中的函数改成递归函数
     *
     * take (n) 取前n个字符,然后组成字符串;
     * drop (n) 去掉前n个字符,然后返回剩下的字符串
     * takeRight 从后面取N个字符,组成字符串
     * dropRight 从后面去掉N个字符安,剩下的字符组成字符串
     */
    def products(str:String) : Long = {
      var t : Long = 1L
      if (str.length == 1) return str.charAt(0).toLong
      else str.take(1).charAt(0).toLong * products(str.drop(1))

    }
    //调用函数并赋值
    products("Hello")
    //打印到控制台
    println(t)  //9415087488

    /**
     * 9、编写函数计算,其中n是整数,使用如下的递归定义:
     * x^n = x*x^(n-1),如果n是正数的话
     * x^0 = 1
     * x^n = 1/x^(-n),如果n是负数的话
     * 不得使用return语句
     */
    def mi(x:Double,n:Int) : Double = {
      if (n == 0) 1
      else if (n > 0) x * mi(x,n-1)
      else 1/mi(x,-n)
    }
    //调用函数赋值打印到控制台
    println(mi(3,-2))  //3的-2次方即1/9,值为0.1111111111111111

  }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值