我提供的这组代码应该接受我输入的任何数字并将其反转。目前该函数在 n = 21.365 或 n = 5698 时有效,但当 n = 0456456456 时它返回 41422397 而不是 6546546540 或当 n = 056985 时它返回 58965 而不是 589650 并且当 n = 016540 时它返回 257 而不是 45610。
这是我目前写的
//rules & limitations
//negative numbers should remain negative
//leading zeros should be removed
//the function can accept floats or integers
//the function will return integers as integers
function reverseNumberWithBuiltInFunctions(n) {
return (
parseFloat (
n
//convert the number to a string
.toString()
//convert to array of characters
.split('')
//reverse array of characters
.reverse()
//join reversed array of characters
.join('')
) * Math.sign(n)
)
}
我想如果 n = 001 则返回 100,或者如果 n = 0456456456 则返回 6546546540。本质上,当前导零或尾随零或两者都包含在“n”中时,我遇到了麻烦,或者当数字存在某种模式时似乎会出现问题。
另外,为什么当 n = 016540 时返回 257?
您是否知道有任何解决方案可以帮助根据给定的规则和限制改进函数的逻辑,从而产生预期的结果?
最佳答案
如果输入是整数或 float ,您想要的是不可能的。整数或 float 都没有“前导零”之类的东西。如果您使用前导零来生成整数文字,它会变成八进制文字(更改值;这就是为什么 n = 0456456456
表现如此,0456456456
只是79322414
的八进制拼写方式)。如果您解析带有前导零的字符串以生成整数,它们将被简单地忽略(parseInt('000123')
生成与 parseInt('123')
相同的值,即值 123
)。这就是 016540
变为 257
的原因:八进制文字等同于十进制文字 7520
,将其反转并解析回整数会忽略前导 0
,留下 257
。
您无法保留此类前导零,因为它们不存在于字符串形式之外。并且您将在反转时丢失尾随零,因为它们在新形式中变成前导零。
要么只使用字符串,要么接受你将丢失前导零的事实。
我会注意到您在评论中的自己的规则指定:
//leading zeros should be removed
所以它在这里按预期工作。
关于javascript - 为什么尾随零和前导零会导致我的函数返回我不想要的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56178231/