开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[其他] 有限数位表示大数

 发表于 2025-1-16 03:45:11 来自手机|显示全部楼层|阅读模式 IP:安徽省
100铁粒
本帖最后由 夙S溯 于 2025-1-16 04:10 编辑

如标题,虽然正常的进制已经是对0-9的全排列了,理论上没有更多的组合方法来表示一个数,但是确实有方法可以突破这个限制,比如
9
满10后变成
00并重新计数
99,满100变成
000,可以看出,仅仅用三位数字就可以表示999+99+9=1107个数字
所以这里给出限定条件,要求n位数字,可以表示:进制^(1.5n)个数字,或者证明其不存在这种方法
其他限定:初始n位,但是你可以同时储存2n位数字,且每个数字的最大值不能超过 进制
你可以描述一个过程的步骤,或者其他的数位表示法,但是要求,对于这个东西,不断+1或者-1(满足任意一个)有穷

最佳答案

查看完整内容

按理说,三位数字只能表示1000个数字(000~999) 我仔细阅读了几遍你的方法,你说 “9”——0~9,9个(其实是10个) “满10后变成00重新计数”——00~99,99个(其实是100个) “满99后变成000重新计数”——000~999,999个(其实是1000个) 所以总共是999+99+9=1107个(其实是1000+100+10=1110个) 这种方法似乎是把前导0也算作了数字的一部分(比如说,一般把8和08和008都看成一个值,但这种方法把它们都区别开,即便它们在 ...

评分

参与人数 1铁粒 +10收起理由
 王2*** + 10苦力怕论坛感谢有你~

查看全部评分

苦力怕论坛,感谢有您~
 发表于 2025-1-16 03:45:12|显示全部楼层 IP:浙江省
本帖最后由 louyukai 于 2025-1-16 04:04 编辑

按理说,三位数字只能表示1000个数字(000~999)

我仔细阅读了几遍你的方法,你说

“9”——0~9,9个(其实是10个)
“满10后变成00重新计数”——00~99,99个(其实是100个)
“满99后变成000重新计数”——000~999,999个(其实是1000个)

所以总共是999+99+9=1107个(其实是1000+100+10=1110个)

这种方法似乎是把前导0也算作了数字的一部分(比如说,一般把8和08和008都看成一个值,但这种方法把它们都区别开,即便它们在数值上都是一位数8)
也就是说,其实你用的并不是“三位数”表示1107个数字,而是用“三位数+两位数+一位数”表示1107个数字,因为真正的三位数是从000开始的,所以不存在08和8这样的数字

按照这种方法,10位数字能表示的个数就是11111111110个,略大于10^10,远小于10^15,所以这种方法不能表示10^15个数字
2#2025-1-16 03:45:12收起回复
夙S溯2025-1-16 04:05IP:安徽省
回复举报
正是因为远远小于,所以才过来问的,0,00,000,利用这个不会对计算机产生多余的负担,而且是必然产生的数,这是传统记数法没有利用的数字
louyukai回复夙S溯2025-1-16 04:08IP:浙江省
回复举报
但是依照我的计算,这种方法似乎并不能达到10^15个数字
louyukai回复夙S溯2025-1-16 04:08IP:浙江省
回复举报
另外对于计算机来说,几乎所有编程语言自带的数据类型都能最大程度地利用内存空间,所以这种“另辟蹊径”的方法对计算机是没有效果的
夙S溯回复louyukai2025-1-16 04:14IP:安徽省
回复举报
问题改了,我是要一个超过传统记数法极限的计数法,因为我想表示非常大的数字,刚开始是需要10^80位数字,后来不断缩减,最终才过来追求高效
夙S溯回复louyukai2025-1-16 04:16IP:安徽省
回复举报
想做一个大数相关的模组,后来发现计算机表示10↑↑3都不太行
苦力怕论坛,感谢有您~
回复

使用道具举报

 楼主|  发表于 2025-1-16 03:56:03 来自手机|显示全部楼层 IP:安徽省
我要的是f(进制^位数)>进制^位数的f,所以不要跟我提换进制
3#2025-1-16 03:56:03回复收起回复
苦力怕论坛,感谢有您~
回复

使用道具举报

 发表于 2025-1-16 04:35:14|显示全部楼层 IP:浙江省
我已经再次阅读了你的回复和修改后的问题

关于原问题,我个人认为是不可能的,无论什么计数值,只要用数字表示,最后无非还是一些排列组合。不过我不敢保证有没有别的“另辟蹊径”方法,你可以等待别人的回答(现在是大半夜,应该一时半会不会有人来吧2333),我也很好奇有没有这样的方法。

如果你的目的是制作大数相关的模组,我建议你放弃寻找这类计数值。像10↑↑3这种大数无论如何也不可能在计算机中直接表示,因为任何方法都不可能突破计算机的物理极限——内存能存储的信息是有限的。如果你想要使用这些大数,我有几个实现的建议:

1.放弃部分精度:计数值的目的是为了精确表示数字,如果你没有那么高精度要求,完全不需要精确表示数字,像10↑↑3直接写成10E10000000000就好了,这应该是最方便的方法
2.用公式来表示数字:比如10↑↑3这种数,在知道它的构造方式后,就可以在计算机中通过它的构造公式来表示它(想要实现这个的话,可能得写一个专门表示大数的类,然后实现一些加减乘除的方法,总之基本是从0开始写一遍了)
4#2025-1-16 04:35:14回复收起回复
苦力怕论坛,感谢有您~
回复

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

| 由 木韩网络 提供支持 | GMT+8, 2026-6-23 19:35

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4