如何在c中打印大数字?

如何在c中打印大数字?,c,bigint,C,Bigint,我试图在projecteuler.net中解决问题集16。我试图找到2^1000,我用C语言为其编写了一个名为power()的函数。这里的问题是,如果我将printf()放入power()中以获得结果值,答案是1071508607186267320948425049060001810514048117053360744375038837010511249361224931983788585812759467291755314682587145285692310439845774698574848

我试图在projecteuler.net中解决问题集16。我试图找到
2^1000
,我用C语言为其编写了一个名为
power()
的函数。这里的问题是,如果我将
printf()
放入
power()
中以获得结果值,答案是
1071508607186267320948425049060001810514048117053360744375038837010511249361224931983788585812759467291755314682587145285692310439845774698574848483934567774824230985421074606271141875418215364749835819412673987675591655946077624571196477654217660425252628672056680376.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);
}
#包括
整数幂(双基,整数幂)
{
int i=1;
双决赛=0;
双ans=1;

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

此外,您不能使用
double main(){}
启动程序。规范要求您使用
int
void


您必须找到一些库来为您进行计算。

main
相反,在
power
中打印不同的值的原因是
power
的返回类型是
int
。因此,该值被截断为
int
中适合的值

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

double power(double base,int ex)

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

C不是C++,<代码>双主()当然不是C++和C++是两种非常不同的语言。如果你在C中编程,并且希望在C中找到一个解决方案,那么只使用那个标签。对于你的问题,你应该做更多的研究。如果你想在标准类型的可能性之外寻找任何一个BigNem库。这个项目的想法是找到。一种计算
2^1000
的数字总和的方法,无需计算
2^1000
,因为(正如所有其他提到的)它不适合于公共数据类型。