Neo*_*ard -2 algorithm math largenumber
的增加在这种情况下,数目将是一个谁,因为他们从左至右,如移动数字正在增加14578
和3489
和 3347778
.
甲减少数目将是相同的,除了颠倒,如84320
和931
.
给定x
1到10之间的数字,如果不使用强力/迭代类型的方法,您如何计算增加但不减少或减少但不增加的数字的总数?
+---+-------+
| X | Total |
+---+-------+
| 0 | 1 |
| 1 | 10 |
| 2 | 100 |
| 3 | 475 |
| 4 | 1675 |
| 5 | 4954 |
+---+-------+
Run Code Online (Sandbox Code Playgroud)
如果要计算增加的数量,可以构建一个2D表,其中行对应于所涉及的数字,列对应于数字位数.然后i
使用数字中的数字向上插入数字增加的数字j
.第一栏很简单:
1 digit 2 digits 3 digits ...
>= 0 10
>= 1 9
>= 2 8
>= 3 7
>= 4 6
>= 5 5
>= 6 4
>= 7 3
>= 8 2
>= 9 1
Run Code Online (Sandbox Code Playgroud)
如果要计算下一列,可以参考前一列.假设您要计算cell(2, 9)
(数字大于9的两位数字).然后你可以在前面放一个9并使用任何一位数大于9的数字.所以,只有1.同样的cell(2, 8)
.您可以在前面添加8加上任何1位数字,数字大于8(cell(1, 8)
)加上您用于下面单元格的相同数字.一般来说:
cell(i, j) = cell(i - 1, j) + cell(i, j + 1)
Run Code Online (Sandbox Code Playgroud)
前几列是:
1 digit 2 digits 3 digits ...
>= 0 10 10+45=55 55+165=220
>= 1 9 9+36=45 45+120=165
>= 2 8 8+28=36 36+84=120
>= 3 7 7+21=28 28+56=84
>= 4 6 6+15=21 21+35=56
>= 5 5 5+10=15 15+20=35
>= 6 4 4+ 6=10 10+10=20
>= 7 3 3+ 2=6 6+ 4=10
>= 8 2 2+ 1=3 3+ 1=4
>= 9 1 1 1
Run Code Online (Sandbox Code Playgroud)
总数始终是条目cell(digits, 0)
.所以有220个增加的数字,有三个或更少的数字.
可以计算类似的表以减少数量.但是,为了计算递减数的数量,您必须对所有列求和.例如,三位数递减数字:10+55+220=285
.
为了计算增加或减少的数字,只需将这两个值相加并减去增加和减少的数字.对于每个数字,它将有10.因此对于3位数字,您必须计算220+285-30=475
.
所以,迭代计算表.您只需保留当前列并相应地计算总数.