swift 阶乘问题

第一题:

问题1. 阶乘(factorial)

请写出针对整数 n 返回的阶乘 {n! = n x (n-1) x (n-2)....2 x 1} 的函数 myFactorial. (n>0) 例 : myFactorial(8) = 8x7x6x5x4x3x2x1 = 40320

 

问题2:  金字塔

   *
  ***
 *****
*******

OC 方法

-(void)drawPyramid:(NSInteger)n{

    int i, j, k;

    for (i=0; i<n;i++)

    {

        for (j=0;j<(n-1)-i;j++){

            printf(" ");

        }

        for (k=0;k<2*i+1;k++){

            printf("*");

        }

        printf("\n");

    }

 

}

 

问题3. 颠倒(reverse)

请写出颠倒单词(不是字母)顺序的函数 myReverse. 每个单词以空格区分. 不可直接使用 split 或 separate 等的字符串分割函数.
例 : myReverse(“These questions are too easy for me”)
=> “me for easy too are questions These”

方法一: 利用swift自带方法,字符串转数组,数组反转,数组转字符串

    func reverse(str: String) {

        let stf = str.split(separator: " ").reversed().joined(separator: " ")

    }

方法二: 麻烦方法    

    func reverseSentence(str:String) -> String {

        var strArr:[Character] = [Character]()

        for c in str.characters {

            strArr.append(c)

        }

        reversePosition(strArr: &strArr, begin: 0, end: str.characters.count - 1)

        var start:Int = 0

        var end:Int = 0

        while end < strArr.count {

            if String(strArr[start]) == " " {

                start += 1

                end += 1

            } else if String(strArr[end]) == " " {

                reversePosition(strArr: &strArr, begin: start, end: end-1)

                start = end

            } else {

                end += 1

            }

        }

        return String(strArr)

    }

 

    func reversePosition(strArr:inout [Character],begin:Int,end:Int)  {

        var low:Int = begin

        var high:Int = end

        while low < high {

            strArr.swapAt(low, high)

            low += 1

            high -= 1

        }

    }

 

问题4. 四舍五入(round)

请写出针对实数 f 返回四舍五入值(正数)的函数 myRound. (不可使用语言自带的 round 函数). 例 : myRound(1.0) = 1, myRound(1.3) = 1 , myRound(1.5) = 2, myRound(1.8) = 2

    func round(num: Float) -> Int {

        let tempNum = Int(num) //转整型

        let s = num - Float(tempNum) /原数值与整型差

// 是否大于0.5

        if s.isLess(than: 0.5) {

            return tempNum 

        } else {

            return tempNum + 1

        }

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值