2

在任何地方都找不到好的例子。如何将 Base 20 数字转换为十进制?我正在处理小数。我知道如何从 Vigesimal 转换为十进制,这部分很容易。但我正在尝试将 Vigesimal 转换回十进制(整数),但我不知道该怎么做。有人有什么好的例子吗?顺便说一句,我正在使用 c++。

例如,我试图找出一种算法,它将 12 的 Vigesal 数转换为其十进制等效值 22(整数)。或类似的东西:

30(整数)= 1A(十进制)

提前致谢,

4

3 回答 3

1

这真的只是基本的数学。假设您拥有的数字在一个字符串中。然后(伪代码)

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 。J1019

于 2014-04-13T04:26:39.540 回答
1

这是双向的(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"))

基于林奇的回答

于 2016-08-17T10:16:55.187 回答
0

在任何位置数字系统中,任何数字(偶数小数)都表示为 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

其他语言也提供类似的转换功能,主要在其字符串处理库中找到。

于 2014-04-13T21:46:39.517 回答