C ++创建一个新的数字基数组

时间:2013-10-22 08:45:47

标签: c++ arrays base

在这里完成noob。 在C ++中尝试这个。 我正在尝试创建一个任何基数的数组。 那就是我想定义一个新的基础并在新基础中使用这个数组“count”。 例如:基地78。 我想创建一个允许3个78基数的数组,这样当我添加到第一个“数字”时,当它达到78时溢出到第二个数字。 类似于[1] [1] [77] + 1 = [1] [2] [0] ......

这是否有效?我可以这样做,让我们说一个20长的基数10000?或计算时间会杀了我?

感谢。

2 个答案:

答案 0 :(得分:0)

尝试一下

的内容
class counter_array {
  public:
    static const int LEN = 20;
    static const int base = 5;

    counter_array operator+=(int inc) {
      arr[0] += inc;
      for (int i = 1; i < LEN; ++i) {
        int old = arr[i];
        arr[i] += arr[i-1] / base;
        arr[i-1] %= base;
        if (arr[i] == old) {
          break;
        }
      }
    }

  private:
    int arr[len];
};

我没有做任何调试,但你应该得到漂移。

答案 1 :(得分:0)

内部(至少在所有现代机器和所有机器上 它支持C或C ++),积分值是二进制的。其他 碱仅用于输入和输出。内部运作, 像计数一样,它们是基于独立的&#34;,就它们而言 取决于价值及其表现方式。

问题是long long(至少64位)是否很大 足够。如果是这样,您只需要提供转换例程 它。 (strtoll支持最多36个基数,但没有 相应的输出例程。)如果没有,你需要实现 一个更大的整数类型,使用Knuth的算法 四个基本操作员。而且您需要提供转换 输入和输出的例程(一旦你有的话很容易 四个基本操作)。

当然,您可以使用任何基础来实施您的 较长的积分型;传统上,基数为2 ^ n,其中n为 可用的机器字大小,已被使用,以提高效率 原因,但没有什么可以阻止你使用基数10000, 或任何适合其中一个机器单词的基础。您的 数字只需要更多的内存(因此需要更多的时间);该 算法是相同的(在Knuth中)。