硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1467|回复: 6
收起左侧

有100个珠子的算盘采用几进制表示值范围最大?

[复制链接]

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
发表于 2022-2-22 22:42:16 | 显示全部楼层 |阅读模式
  1. total = 100

  2. for i in range(2,11):
  3.     j = i
  4.     sum = i
  5.     while j < total:
  6.         j += i
  7.         sum *= i
  8.     print(i, "---", sum)
复制代码
02 --- 1125899906842624
03 --- 16677181699666569
04 --- 1125899906842624
05 --- 95367431640625
06 --- 16926659444736
07 --- 4747561509943
08 --- 549755813888
09 --- 282429536481
10 --- 10000000000


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2022-2-23 00:17:35 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
 楼主| 发表于 2022-2-23 08:59:15 | 显示全部楼层
本帖最后由 emwin 于 2022-2-23 09:00 编辑

复核了下代码,有问题修正下:
  1. total = 100

  2. for i in range(2,11):
  3.     j = i
  4.     sum = i
  5.     while j <= (total - i):
  6.         j += i
  7.         sum *= i
  8.     print("%02d"%i, "---", sum)
复制代码
02 --- 1125899906842624
03 --- 5559060566555523
04 --- 1125899906842624
05 --- 95367431640625
06 --- 2821109907456
07 --- 678223072849
08 --- 68719476736
09 --- 31381059609
10 --- 10000000000
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2022-11-16 19:39:25 | 显示全部楼层
最大那个大概就是 e进制
回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2022-11-21 11:22:14 | 显示全部楼层
算法有问题,二进制,每个位置应该是1个珠子,三进制2颗珠子,以此类推。 计算机要用128bit变量做累计,否则溢出,结果无意义。
回复

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
 楼主| 发表于 2022-12-15 20:37:05 | 显示全部楼层
apleilx 发表于 2022-11-21 11:22
算法有问题,二进制,每个位置应该是1个珠子,三进制2颗珠子,以此类推。 计算机要用128bit变量做累计,否 ...

有理。我修正一下:
[Python] 纯文本查看 复制代码
total_unit = 100

for i in range(1, 19): # N进制每个位需要N-1个单元
    unit_used = i
    max_val = i
    while (unit_used + i) <= total_unit:
        max_val *= (i + 1)  # 左移乘以进制
        max_val += i        # 加上个位最大值
        unit_used += i
    if i != 9:
        print("%02d"%(i + 1), "---", "0x%X" % max_val) # 十六进制
    else:
        print("%02d"%(i + 1), "---", max_val) # 十进制


02 --- 0xFFFFFFFFFFFFFFFFFFFFFFFFF
03 --- 0x980553F0DB2FD09DE3C8
04 --- 0x3FFFFFFFFFFFFFFFF
05 --- 0x422CA8B0A00A424
06 --- 0xCFD41B90FFFFF
07 --- 0x1E39A5057D80
08 --- 0x3FFFFFFFFFF
09 --- 0x41C21CB8E0
10 --- 99999999999
11 --- 0x609FDB0D8
12 --- 0x1338BFFFF
13 --- 0x309F1020
14 --- 0x6487B7F
15 --- 0xA2F1B6E
16 --- 0xFFFFFF
17 --- 0x1704F60
18 --- 0x1CD51F
19 --- 0x25C842


回复

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
 楼主| 发表于 2022-12-15 20:46:51 | 显示全部楼层
不过,实际算盘似乎不是这样的。中国的是二五算盘,可以表示十六以内。
image.png
有十进制的算盘,是十颗算珠:
image.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 20:35 , Processed in 0.202810 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表