在任何地方都找不到好的例子。如何将 Base 20 数字转换为十进制?我正在处理小数。我知道如何从 Vigesimal 转换为十进制,这部分很容易。但我正在尝试将 Vigesimal 转换回十进制(整数),但我不知道该怎么做。有人有什么好的例子吗?顺便说一句,我正在使用 c++。
例如,我试图找出一种算法,它将 12 的 Vigesal 数转换为其十进制等效值 22(整数)。或类似的东西:
30(整数)= 1A(十进制)
提前致谢,
在任何地方都找不到好的例子。如何将 Base 20 数字转换为十进制?我正在处理小数。我知道如何从 Vigesimal 转换为十进制,这部分很容易。但我正在尝试将 Vigesimal 转换回十进制(整数),但我不知道该怎么做。有人有什么好的例子吗?顺便说一句,我正在使用 c++。
例如,我试图找出一种算法,它将 12 的 Vigesal 数转换为其十进制等效值 22(整数)。或类似的东西:
30(整数)= 1A(十进制)
提前致谢,
这真的只是基本的数学。假设您拥有的数字在一个字符串中。然后(伪代码)
number = "AF8";
base = 20;
result = 0;
for each c in number:
temp = numberValueOf(char)
result = base * result + temp
print "converting ", number, " results in ", result
在这里,该numberValueOf
函数将字符转换0
为它们9
的等效值,并A
变为through 。J
10
19
这是双向的(Vigesimal to Decimal 和 Decimal to Vigesimal)
#!/usr/bin/env python
def convert(vigisemal):
i = int(vigisemal, 20)
return i
def tovigisemal(decimalstring):
dec = int(decimalstring)
x = (dec % 20)
digits = "0123456789ABCDEFGHIJ"
rest = dec / 20
if (rest == 0):
return digits[x]
return tovigisemal(rest) + digits[x]
if __name__ == '__main__':
print(convert("H1"))
print(tovigisemal("341"))
基于林奇的回答
在任何位置数字系统中,任何数字(偶数小数)都表示为 sum(d i * base i ),其中 d i是第 - 位的数字i
(从右到左计数),d 0是小数点左边的第一个位置。为了便于评估,总和可以使用霍纳规则“折叠” :
(((d[n]*base + d[n-1])*base + d[n-2])*base + d[n-3])*base + ...
关于这个的好处是,一个人可以从最重要的数字开始,然后按照数字在内存或文件字符串中的排序方式向右工作。
string number = "1A";
int decimal = 0;
for (string::const_iterator it = number.begin(); it != number.end(); it++)
decimal = decimal * base + to_int(*it);
to_int()
应该注意将字符转换为其十进制值,例如
int to_int (char d) {
if ('0' <= d && d <= '9')
return d - '0';
else if ('A' <= d && d <= 'J')
return 10 + (d - 'A');
else
throw some error
}
C++ 提供了一个方便的stoi()
函数来为你做数学:
#include <string>
#include <iostream>
using namespace std;
int main (void) {
string number = "1A";
cout << number << " in decimal is " << stoi(number, 0, 20) << endl;
}
编译并运行:
$ clang++ -o visc visc.cc && ./visc
1A in decimal is 30
在 C 中,可以strtol()
将基数设置为 20。但它应该用于输入标记器并修改其输入参数,因此应小心。
在 Python 中,该string
模块提供atoi()
了可选择的基础:
>>> from string import atoi
>>> atoi("1A", 20)
30
其他语言也提供类似的转换功能,主要在其字符串处理库中找到。