基数加法
你好,我在几个问题上遇到了一些困难,想知道有没有人能帮我。
我需要把不同进制的数字加在一起,但我不知道该怎么做。
下面是我遇到的问题。请问有人能帮忙吗?
Add the numbers in bases indicated (I cant figure out how to do this, can someone help!!!)
A). 4 3 7 1 base 8 + 2 7 7 3 base 8 = Answer has to be in base 8
B). 1 3 5 D base 16 + 9 9 A base 16 = has to be in base 16
C). 1 1 1 0 base 2 + 1 1 0 base 2 + in base 2
2 个回答
使用 int(x, base=xxx)
可以把一个表示为基数 xxx
的字符串 x
转换成整数,然后把这些数字加起来,最后用 bin
、oct
和 hex
来把结果转换成二进制、八进制或十六进制的字符串表示。
示例:
In [10]: lst = ['4', '3', '7', '1'] #assuming you have a list of strings
In [11]: oct(sum(int(i, base=8) for i in lst))
Out[11]: '017'
现在你习惯的是十进制,也就是我们常说的基数10。那么十进制是怎么工作的呢?
其实,你从个位数开始数,一直到9。当你想再加1的时候,已经没有一个数字可以表示10了,所以你需要把个位数重置为0,然后把十位数加1。当你数到99的时候,情况也是一样,你要把个位和十位都重置为0,然后把百位数加1。
所以在十进制中,1位数最多能表示9个数字,2位数最多能表示99个数字,3位数最多能表示999个数字。
这里有个规律,我就不告诉你了,你自己去发现吧。然后你可以把这个规律应用到其他进制上,自己去搞明白。
八进制也是一样,只不过你需要更早地进行重置和进位。
在八进制中,你这样数:1, 2, 3, 4, 5, 6, 7,但我们没有一个字符来表示'8',因为它不够高。就像在十进制中,我们没有一个字符来表示10一样。
所以在这里,我们需要把它进位到下一个数字,也就是十位。数到10, 11, 12, 13, 14, 15, 16, 17,然后又要进位,变成20, 21……等等。
当我们数到77时,就要重置为100(在十进制中是64),而777则重置为1000(在十进制中是?)。
你可以用这个方法来检查你的答案。http://gwydir.demon.co.uk/jo/numbers/binary/bases.htm
如果你花点时间去理解也没关系。学习一门新语言,实际上就是学习一种新的看待世界的方式。一开始可能会觉得有点可怕,但后来会觉得很棒。
祝你好运,欢迎来到编程的世界!