第一题:
问题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
}
}