如何在c中打印大号?

时间:2018-03-19 10:06:31

标签: c bigint

我尝试在 projecteuler.net 中解决问题集16 。我试图找到2^1000,我在C中用一个名为power()的函数编写了一个代码。这里的问题是,如果我将printf()置于power()内以获取结果值,答案为10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.000000,但如果我在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);
}

2 个答案:

答案 0 :(得分:2)

power内而不是main内打印不同内容的原因是因为power的返回类型为int。结果,该值被截断为适合int

的值

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

double power(double base,int ex)

正如其他人所提到的那样,这个数字大于int大多数数字的范围,这个数字无法在double中准确表示。但是,在这种特殊情况下,因为您计算的数字是2的幂,所以可以完全表示。如果你选择了2(或2的幂)之外的基数,结果将不准确。

答案 1 :(得分:1)

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

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

你必须找到一些为你做计算的图书馆。