如何计算一个数字的位数?
How to count digits of a number?
我正在我的 TI-84 上编写程序,我需要一种方法来计算数字的位数。
我该怎么做?
我已经有很长时间没有接触 TI-Basic 了,但是,我确实知道有一种计算数字位数的数学方法。由于每个位置都是 10 的倍数,因此您应该只能使用(以 10 为基数的对数)加一。这是假设您使用的是正整数。
另一种更通用的解决方案是将数字的长度转换为字符串。看起来这里有一些文档:http://tibasicdev.wikidot.com/number-to-string2
假设它是一个正整数,您可以从该数字中减去 10 的递增幂。如果结果小于 0,则减去的最后一次幂就是位数。
例如,考虑数字 643。首先减去 10 - 得到正数 633。接下来尝试 100 - 给出 543,这是肯定的。接下来尝试 1000 - 给出 -357。因此位数为 3(由 10^3 给出)。
两者都
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.~
还有 10log x = log x / log 10.
鉴于您使用的是 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
我正在我的 TI-84 上编写程序,我需要一种方法来计算数字的位数。
我该怎么做?
我已经有很长时间没有接触 TI-Basic 了,但是,我确实知道有一种计算数字位数的数学方法。由于每个位置都是 10 的倍数,因此您应该只能使用(以 10 为基数的对数)加一。这是假设您使用的是正整数。
另一种更通用的解决方案是将数字的长度转换为字符串。看起来这里有一些文档:http://tibasicdev.wikidot.com/number-to-string2
假设它是一个正整数,您可以从该数字中减去 10 的递增幂。如果结果小于 0,则减去的最后一次幂就是位数。
例如,考虑数字 643。首先减去 10 - 得到正数 633。接下来尝试 100 - 给出 543,这是肯定的。接下来尝试 1000 - 给出 -357。因此位数为 3(由 10^3 给出)。
两者都
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.~
还有 10log x = log x / log 10.
鉴于您使用的是 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