【问题标题】:How to print large number in c?如何在c中打印大数字?
【发布时间】:2018-08-27 20:27:58
【问题描述】:

我试图解决 projecteuler.net 中的问题集 16。我试图找到2^1000,为此我在C 中编写了一个带有名为power() 的函数的代码。这里的问题是,如果我将printf() 放在power() 中以获得结果值,答案是@ 987654326@ 但如果我在power() 中使用返回值并尝试从main() 打印结果,则答案是-2147483648.000000。 这是我的代码。

#include <stdio.h>

int power(double base,int ex)
{
    int i = 1;
    double final = 0;
    double ans = 1;
    while (i <= ex){
        ans *= base;
        i++;
    }
    printf("%lf\n",ans);     // return ans;
}


int main()
{
    double num;
    double result;
    int power_value;
    printf("enter the base value\n");
    scanf("%lf",&num);
    printf("enter the exponent value\n");
    scanf("%d",&power_value);
    power(num,power_value); //result = power(num,power_value)
    //printf("%lf",result);
}

【问题讨论】:

  • c 不是 c++ 而double main() 肯定不是 c++
  • C 和 C++ 是两种截然不同的语言。如果您使用 C 编程并希望在 C 中找到解决方案,则仅使用该标记。
  • 至于你的问题,你应该对the standard types and their ranges做更多的研究。如果您想要标准类型之外的任何内容,请尝试查找 bignum 库。
  • 这个projecteuler问题的想法是找到一种方法来计算2^1000的数字总和而不计算2^1000,因为(正如所有其他人提到的)它不适合通用数据类型。

标签: c bigint


【解决方案1】:

您要计算的数字实际上比 C 中的标准类型可以处理的要大得多。 long 在今天的机器上几乎总是有 64 位的宽度,因此可以存储在其中的最大数字类似于 2^64 = 18.446.744.073.709.551.615

您也不能使用double main() { } 启动程序。规范要求您使用intvoid

您必须找到一些可以为您计算的库。

【讨论】:

    【解决方案2】:

    powermain 不同的原因是因为power 的返回类型是int。结果,该值被截断为适合int 的值。

    将返回类型更改为double,使其与您正在使用的变量的类型相匹配,您将获得预期的结果。

    double power(double base,int ex)
    

    正如其他人所提到的,这么大的数字超出了int 的范围,并且大多数 这么大的数字无法在double 中准确表示。然而,在这种特殊情况下,因为您计算的数字是 2 的幂,它可以精确表示。如果您选择了 2 以外的基数(或 2 的幂),结果将不准确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 2014-12-14
      • 2012-01-03
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2023-03-07
      • 2011-08-22
      相关资源
      最近更新 更多