美文网首页
CodeWar异闻录之16进制换算

CodeWar异闻录之16进制换算

作者: 全汪汪 | 来源:发表于2020-04-28 16:59 被阅读0次

    问题:

    将一组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函数一个深入的理解,妙啊妙啊

    相关文章

      网友评论

          本文标题:CodeWar异闻录之16进制换算

          本文链接:https://www.haomeiwen.com/subject/sihbwhtx.html