我正在进行一个项目,其中需要使用Damm算法验证整数输入的校验和。我已经成功创建了操作表,我的访问表格中值的方法涉及传递一个临时值和要作为列值传递的数字。
self.tableToUse[interim,checkSumArray[i]]
很不幸,当我尝试将输入的数字传递到获取/设置方法中时,我遇到了一个问题,无法找到将字符转换为整数的方法。
func encode(number: Int) -> Int{
var checkSumArray = [Int]()
if number > 99999999 {
println("number is too large")
return 0
}
else if number < 0 {
println("invalid input")
return 0
}
else {
checkSumArray.append(number%(10))
checkSumArray.append((number%(100)-checkSumArray[0])/10)
checkSumArray.append((number%(1000)-checkSumArray[1])/100)
checkSumArray.append((number%(10000)-checkSumArray[2])/1000)
checkSumArray.append((number%(100000)-checkSumArray[3])/10000)
checkSumArray.append((number%(1000000)-checkSumArray[4])/100000)
checkSumArray.append((number%(10000000)-checkSumArray[5])/1000000)
checkSumArray.append((number%(100000000)-checkSumArray[6])/10000000)
checkSumArray = checkSumArray.reverse()
var interim: Int = 0
for i in 0..<checkSumArray.count{
interim = self.tableToUse[interim,checkSumArray[i]]
}
return interim
}
}
正如您所看到的,我不得不采取一种非常恶劣的方式来处理这个问题。它能够工作,但是非常有限、低效,并且很难看或维护。我尝试过使用字符而不是整数在我构建的Damm表中,并修改get/set方法以处理它们,但那需要大量额外的工作,并可能引入其他问题。如果有其他替代方法或将字符转换为整数的方法,将不胜感激。
谢谢!