在这里完成noob。 在C ++中尝试这个。 我正在尝试创建一个任何基数的数组。 那就是我想定义一个新的基础并在新基础中使用这个数组“count”。 例如:基地78。 我想创建一个允许3个78基数的数组,这样当我添加到第一个“数字”时,当它达到78时溢出到第二个数字。 类似于[1] [1] [77] + 1 = [1] [2] [0] ......
这是否有效?我可以这样做,让我们说一个20长的基数10000?或计算时间会杀了我?
感谢。
答案 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中)。