问题:
将一组RPG值如(255,255,255)换成16进制->FFFFFF
若RPG输入的值小于0取0,若最终转换的值大于FF则转换为FF。
语言使用:
Kotlin
我的思路
1.将十进制的数字先除以16,向下取整,即: floor(X / 16) 得出一共有多少个16,即在16进制里进了多少次位
2.取改数字16的余数,即 X % 16 得出该十进制数还剩多个数没被进位。
3.将以上两者结果均转换为char值,与55相加,因为10-15与字母A-F的char值相差55,便可将上述两个大于9的结果转化为对应16进制的A-F。当然要确保上述结果一定要大于9。
4.最后字符串相加拼接即可:
fun hexConversion(value: Int): String {
if (value <= 0 ){
return "0"
}
if (value >= 255) {
return "F"
}
return if (value >= 10) {
(value + 55).toChar().toString()
}else {
value.toString()
}
}
别人的答案
当时我还纳闷这KT难道没有一个进制转化的函数吗?于是我看到了别人的答案:
listOf(r, g, b).joinToString("") {
it.coerceIn(0..255).toString(16).padStart(2, '0').toUpperCase()
}
草就三行,先是用joinToString函数对其做括号内的函数变化,然后将每个数组的元素分隔符变为(""):
首先是coerceIn(Range) 函数,这个我以前还真知道,查了下是小于范围内的,用范围最小的表示,大于范围外的用范围内最大的表示。(对应我上面对数值小于0大于255的判断)
然后是toString(Int),我一直都是觉得他只是个类型转换,没想到还能转换进制。
最后是padStart(Int, Char),小于参数Int值的前面用Char补充。
妙啊妙啊,其实我那样把算法也写出来也算是某种进步,而相对"别人的答案"则是对Kotlin函数一个深入的理解,妙啊妙啊
网友评论