此函数将数字与此数字组件的多维数据集之和进行比较。例如,abc = a ^ 3 + b ^ 3 + c ^ 3。转换时出错,请帮忙。
func triKuba ( i:Int16, k:Int16, var array:[Int16]=[] ) ->Int16{
for var i=100;i<1000; i++ {
array.append(Int16(i))
if array[i] == pow(array[i]/10) + pow(array[i]/100) + pow(array[i]%10) {
return array[i]
} else {
return 0
}
}
}
triKuba(0, k: 0)
方法pow中的下一个错误&#39;无法使用Int16&#39;类型的参数列表调用pow。如果我理解正确,方法pow是^ 3
答案 0 :(得分:1)
我强烈怀疑这就是你要找的东西:
func arithmeticRoot3(var value: Int) -> Int {
var result = 0
while value > 0 {
let digit = value % 10
result += digit * digit * digit
value /= 10
}
return result
}
func triKuba() -> [Int] {
return (100...999).filter() {
$0 == arithmeticRoot3($0)
}
}
print(triKuba()) // [153, 370, 371, 407]
答案 1 :(得分:0)
您发布的方法有几个语法问题。我修好了他们。工作方法如下:
Lazy
您遇到的错误是关于从func triKuba ( i:Int16, k:Int16, var array:[Int16]=[] ) ->Int16{
for var i=100;i<1000; i++ {
array.append(Int16(i))
if Double(array[i]) == pow(Double(array[i])/10, 3.0) + pow(Double(array[i]/100), 3.0) + pow(Double(array[i]%10), 3.0) {
return array[i]
} else {
return 0
}
}
}
到Int
答案 2 :(得分:0)
我不是解决您的问题,而是解释问题所在,而为什么会抛出错误。有了这些信息,您应该能够解决问题(以及将来的类似问题!)。
在Swift中,你总是可以做一些事情,比如将Int与Float相乘,或者从Double类型返回函数返回Int16。对于您来说,显然将变量转换为预期类型可能会很好 - 但编译器并不知道
如果您确定它是安全的,您可以“投射”#39;变量到所需类型:
Int(int16Variable) // int16Variable has been casted to an 'Int'.
答案 3 :(得分:-1)
i
变量,该变量隐含为Int
类型,而不是Int16
。 (由于阴影这是函数体中使用的变量,所以传入的参数i
永远不会被使用。
我建议将函数参数的类型更改为Int
类型,如下所示:
func triKuba (var i: Int, var k: Int, var array: [Int]=[] ) -> Int {
或将Int16
变量转换为Ints
,如下所示:
array.append(Int16(i))