如何在c中打印大数字?

How to print large number in c?

我试图在 projecteuler.net 中解决 问题集 16。我试图找到 2^1000,我用 C 语言编写了一个名为 power() 的代码。这里的问题是,如果我将 printf() 放在 power() 中以获得结果值,答案是 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.000000 但如果我在 power() 中使用 return 值并尝试打印 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 中的标准类型可以处理的数字大得多。 long 在当今的机器上几乎总是宽度为 64 位,因此可以存储在其中的最大数字类似于 2^64 = 18.446.744.073.709.551。 615 < 2^2000

此外,您无法使用 double main() { } 启动程序。规范要求您使用 intvoid.

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

之所以在 power 中打印一个不同于 main 的原因是因为 power 的 return 类型是 int。结果,该值被截断为适合 int.

的值

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

double power(double base,int ex)

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