首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入超出了Int数据类型的范围,未传递测试用例

输入超出了Int数据类型的范围,未传递测试用例
EN

Stack Overflow用户
提问于 2021-05-22 21:58:55
回答 2查看 63关注 0票数 0

我正在尝试解决LeetCode上的以下问题;编写一个函数,该函数接受一个无符号整数,并返回它所具有的'1‘位数。约束:输入必须是长度为32的二进制字符串。

我已经为输入0000000000000000000000000000101100000000000000000000000010000000 (由网站内部提供)编写了以下代码,但为输入11111111111111111111111111111101提供了输出0,并在我的本地编译器中为最后一个输入提供了"out of range“。

代码语言:javascript
复制
 class Solution {
    // you need treat n as an unsigned value
    fun hammingWeight(n:Int):Int {
        var num = n
        var setCountBit = 0
        while (num > 0) {
        setCountBit++
        num= num and num-1
           
        }
        return setCountBit
        
    }
}

EN

回答 2

Stack Overflow用户

发布于 2021-05-23 16:34:41

为了正确地将二进制字符串转换为Int并避免“超出范围错误”,您需要执行以下操作(我相信LeetCode在幕后也做了同样的事情):

代码语言:javascript
复制
fun binaryStringToInt(s: String): Int = s.toUInt(radix = 2).toInt()

"11111111111111111111111111111101"等同于4294967293。它大于Int.MAX_VALUE,因此在.toInt()转换后它将表示为负数(在本例中为-3)。

实际上,这个问题可以用Kotlin 1.4中的一行代码来解决:

代码语言:javascript
复制
fun hammingWeight(n: Int): Int = n.countOneBits()

但是LeetCode使用的是Kotlin 1.3.10,所以你需要调整你的解决方案来处理负的Int

票数 1
EN

Stack Overflow用户

发布于 2021-05-22 22:19:56

请在给定值大于input类型可以存储的最大值时,将输入变量的类型从Int更改为,如Double .At。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67650324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档