如何获取数字的长度(位数)

如何获取数字的长度(位数)

在回答另一个问题时,我报告说,全为 1 的字符串的平方将产生一个数字,其数字上升到原始 1 的数量,然后再下降到 1。

例如 (11111)^2=123454321。

问题是,我如何找出有多少个“一”(一个数字有多少位数字)?

我用谷歌搜索了这个问题,发现这里有很多看似相关的问题,但答案中的“动词”在数学堆栈交换上的 MathJax 中都无效。

更新:有人告诉我这个词是“控制序列”。我想要一个可以执行我在 EXCEL 中执行的操作的控制序列,例如

=len(5 * 13 * 17) 或 =len(1105),结果为 4。

我熟悉 CGOS 操作系统下的 TEX(TTY 环境中全大写),但我不需要也不想要它来进行过程编程。我的需求只是页面布局,仅此而已。

我需要一些可以在 MathJax 和 TeXShop 中运行的东西。

答案1

如果您没有“单词” \length(我们称之为“控制序列”),那么您可以使用 TeX 原语来定义它:

\def\length#1{\lengthA0#1\relax}
\def\lengthA#1#2{\ifx#2\relax\the\numexpr#1\relax\else\afterfi{\lengthA{#1+1}}\fi}
\def\afterfi#1#2\fi{\fi#1}
%test:
\length{1221234}

请注意,这在 MathJax 中不起作用,因为它基于真正的 TeX。

答案2

非负整数的位数n是以 10 为底的对数的上限n+ 1。

是的,0 有零位数字。

\documentclass{article}
\usepackage{xfp}

\NewExpandableDocumentCommand{\digitlength}{O{10}m}{%
  \fpeval{ ceil(ln(#2+1)/ln(#1)) }%
}

\ExplSyntaxOff

\begin{document}

\digitlength{(11111)^2}

\digitlength{123454321}

\digitlength[2]{(11111)^2}

\digitlength[2]{2^(32)-1}

\end{document}

在此处输入图片描述

在 MathJax 中不可能得到类似的东西:它不是一种编程语言。要么你能用 JavaScript 实现它并教 MathJax 使用它,要么你就没那么幸运了。

相关内容