相关疑难解决方法(0)

什么是未定义的引用/未解析的外部符号错误,我该如何解决?

什么是未定义的参考/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?

随意编辑/添加您自己的.

c++ c++-faq linker-errors unresolved-external undefined-reference

1418
推荐指数
32
解决办法
52万
查看次数

在C++中处理大数字?

在C++中处理大型数字输入的最佳方法是什么(例如10^100)?

对于算法,我通常切换到ruby,有时我会使用字符串.

还有其他好方法吗?

c++ largenumber biginteger

19
推荐指数
5
解决办法
5万
查看次数

计算pow(a,b)mod n

我想计算一个用于RSA解密的b mod n.我的代码(如下)返回错误的答案.这有什么问题?

unsigned long int decrypt2(int a,int b,int n)
{
    unsigned long int res = 1;

    for (int i = 0; i < (b / 2); i++)
    {
        res *= ((a * a) % n);
        res %= n;
    }

    if (b % n == 1)
        res *=a;

    res %=n;
    return res;
}
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm

19
推荐指数
4
解决办法
6万
查看次数

将21个字母数字字符压缩为16个字节

我正在尝试获取21个字节的数据,这些数据唯一地标识交易并将其存储在16字节char数组中.我无法为此提出正确的算法.

我正在尝试压缩的交易ID包含2个字段:

  1. 18个字母数字字符,由ASCII字符0x20到0x7E组成,包含.(32-126)
  2. 一个3个字符的数字字符串"000"到"999"

所以包含这些数据的C++类看起来像这样:

class ID
{
public:
    char trade_num_[18];
    char broker_[3];
};
Run Code Online (Sandbox Code Playgroud)

这些数据需要存储在16- char数据结构中,如下所示:

class Compressed
{
public:
    char sku_[16];    
};
Run Code Online (Sandbox Code Playgroud)

我试图利用这样一个事实:由于字符trade_num_只有0-127,每个字符中有1个未使用的位.类似地,999二进制是1111100111,它只有10位 - 比2字节字短6位.但是当我弄清楚我能把它压缩多少时,我能做到的最小值是17个字节; 一个字节太大了.

有任何想法吗?

顺便说一句,trade_num_用词不当.它可以包含字母和其他字符.这就是规范所说的.

编辑:抱歉混乱.该trade_num_字段确实是18个字节,而不是16.在我发布此帖子后,我的互联网连接已经死亡,直到现在我才回到这个线程.

EDIT2:我认为对数据集做出假设是安全的.对于trade_num_字段,我们可以假设不存在不可打印的ASCII字符0-31.ASCII码也不是127或126(〜).所有其他人可能都在场,包括大写和小写字母,数字和标点符号.这trade_num_将在集合中留下总共94个字符,包括ASCII代码32到125(包括端点).

c++ algorithm

14
推荐指数
2
解决办法
4034
查看次数

C++ Big Integer

我正在尝试用C++实现BigInteger类.但是,首先,我有一个基本问题,"基础数据"如何表示?例如,最愚蠢的方法是使用固定(或动态)char数组并在char中存储每个整数的整数.但是,好吧,这是一种非常愚蠢的方式,我在这里是为了你的建议.

c++

14
推荐指数
3
解决办法
7万
查看次数

C++中高数字的模块化指数

所以我最近一直在努力实施Miller-Rabin素性测试.我将它限制在所有32位数字的范围内,因为这是一个非常有趣的项目,我正在做的是熟悉c ++,我不想使用64位的任何东西.一会儿.另外一个好处是该算法对于所有32位数字都是确定性的,因此我可以显着提高效率,因为我确切知道要测试的证人.

因此对于较低的数字,该算法工作得非常好.但是,该过程的一部分依赖于模幂运算,即(num ^ pow)%mod.所以,例如,

3 ^ 2 % 5 = 
9 % 5 = 
4
Run Code Online (Sandbox Code Playgroud)

这是我用于此模幂运算的代码:

unsigned mod_pow(unsigned num, unsigned pow, unsigned mod)
{
    unsigned test;
    for(test = 1; pow; pow >>= 1)
    {
        if (pow & 1)
            test = (test * num) % mod;
        num = (num * num) % mod;
    }

    return test;

}
Run Code Online (Sandbox Code Playgroud)

正如您可能已经猜到的那样,当参数都是特别大的数字时会出现问题.例如,如果我想测试数字673109的素数,我将在某一点上必须找到:

(2 ^ 168277)%673109

现在2 ^ 168277是一个特别大的数字,并且在过程的某个地方它溢出测试,这导致不正确的评估.

在反面,诸如的论点

4000111222 ^ 3%1608

由于同样的原因,也评估不正确.

有没有人对模块取幂有一些建议,可以防止这种溢出和/或操纵它产生正确的结果?(我看到它的方式,溢出只是模数的另一种形式,即num%(UINT_MAX + 1))

c++ integer-overflow modulo exponentiation

13
推荐指数
2
解决办法
2万
查看次数

模数大数的力量

我正在尝试实施SAFER +算法.该算法需要找到幂函数的模数,如下所示:

pow(45, x) mod 257
Run Code Online (Sandbox Code Playgroud)

变量x是一个字节,因此可以在0到255之间.因此,如果使用32位或64位整数实现,则幂函数的结果可能非常大,从而导致不正确的值.

我该如何进行此计算?

language-agnostic algorithm math modulus

9
推荐指数
3
解决办法
1万
查看次数

乘以很长的整数

有没有一种算法可以准确地将两个任意长整数相乘?我正在使用的语言限制为64位无符号整数长度(最大整数大小为18446744073709551615).实际上,我希望能够通过分解每个数字,以某种方式使用无符号的64位整数处理它们,然后能够将它们重新组合成一个字符串(这将解决相乘结果的问题)来实现这一点存储).

有任何想法吗?

algorithm math 64-bit

7
推荐指数
2
解决办法
1万
查看次数

C或C++中的大整数

我正在研究一个因子程序,当试图找到1000的阶乘时,程序不起作用.我认为大整数是解决方案; 它们是如何工作的?(在C或C++中)

c c++ bigint

0
推荐指数
2
解决办法
3万
查看次数

C++:如何存储256位数字,如何将其转换为十六进制?

整数只有32位,长到64位...所以...当你使用更大的数字时你会怎么做?

另外,在二进制表示和十六进制表示之间切换有多容易?

c++

0
推荐指数
1
解决办法
9728
查看次数

如何在C中读取和分配大整数?

我试图将大整数值分配给c中的变量,当我打印时,我只得到10123456.

有什么问题?

  int main(){
      long a = 1234567890123456;
      printf("\n",sizeof(a));
      printf("%ld",a); 
  }
Run Code Online (Sandbox Code Playgroud)

c

0
推荐指数
1
解决办法
630
查看次数