0

我正在我的 TI-84 上编写程序,我需要一种方法来计算数字的位数。

我该怎么做呢?

4

4 回答 4

2

自从我接触 TI-Basic 以来已经有很长时间了,但是,我确实知道有一种数学方法可以计算数字的位数。由于每个位置都是 10 的倍数,因此您应该只能使用(您的号码的以 10 为底的对数)加一。这是假设您使用的是正整数。

另一种更通用的解决方案是将数字的长度转换为字符串。看起来这里有一些文档:http: //tibasicdev.wikidot.com/number-to-string2

于 2015-01-29T02:52:57.687 回答
1

看到您使用的是 TI-84,这些 68k/NSpire 答案不会专门回答您的问题。将 1+int(log(X)) 用于自然数很容易,但是如果您也想支持非零整数怎么办?这个程序(只有 9 个字节)应该可以解决问题:

Prompt X
1+int(log(abs(X

如果要将负号计为数字,只需添加(X<0)+到第二行的开头即可。


我也有一个完全不同的解决方案......对于任何实数,15 个精度字符(包括小数点)并且将负符号计数为一个数字,您可以使用Number to String实用程序,如下所示(10 个字节):

Prompt X:X
prgmS
length(Ans
于 2015-03-01T22:40:12.107 回答
0

假设它是一个正整数,您可以从该数字中减去 10 的递增幂。如果结果小于 0,则最后减去的幂是位数。

例如,考虑数字 643。首先减去 10 - 得到 633,它是正数。下一次尝试 100 - 给出 543 这是正数。接下来尝试 1000 - 给出 -357。因此位数为 3(由 10^3 给出)。

于 2015-01-29T02:56:47.230 回答
0

任何一个

f(x)
:Func
:   If x = 0
:       Return 1
    0 → n
:   While x >= 1
        x / 10 → x   (integer division would be ideal)
        n + 1 → n
:   End
:   Return n
:End Func

或更好

f(x) =
    if x == 0 then return 1
    return int(10log(x)) + 1

10日志给出:

1-9      0.~
10-99    1.~
100-999  2.~

还有10 log x = log x / log 10。

于 2015-01-29T03:02:46.043 回答