c - 两个长数相乘

标签 c multiplication

我尝试通过 C 程序乘以数字,即 1000010000 + 1。但是我没有得到正确的输出。

printf("%lld",(100000)*(100001));

我已经在不同的编译器上尝试了上面的代码,但我得到的是相同的 1410165408 而不是 10000100000

最佳答案

好吧,让我们相乘

  int64_t a = 100000;
  int64_t b = 100001;
  int64_t c = a * b;

我们会得到(二进制)

     1001010100000011010110101010100000 /* 10000100000 decimal */

但是如果你把它转换成int32_t

  int32_t d = (int32_t) c;

您将只得到最后 32 位(丢弃最前面的 10):

       01010100000011010110101010100000 /* 1410165408 decimal */

最简单的方法可能是将两个常量都声明为 64 位 值(LL 后缀代表 long long):

  printf("%lld",(100000LL)*(100001LL));  

关于c - 两个长数相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321953/

相关文章:

matlab - 列向量乘法的 3d 矩阵

c - 在文本冒险中为用户提供 'Yes or No' 选择?

c - 如何从汇编代码逆向工程C整数类型?

c - 维吉尼亚加密

java - java中使用+和-相乘

c - 大整数程序。 X 乘法后停止

c++ - 返回类型 Vector

c - 存储大小未知

c++ - 如何在 C 中访问 SOAP header

assembly - 使用乘法执行整数除法