如何在c中打印大数字?
我试图在projecteuler.net中解决问题集16。我试图找到如何在c中打印大数字?,c,bigint,C,Bigint,我试图在projecteuler.net中解决问题集16。我试图找到2^1000,我用C语言为其编写了一个名为power()的函数。这里的问题是,如果我将printf()放入power()中以获得结果值,答案是1071508607186267320948425049060001810514048117053360744375038837010511249361224931983788585812759467291755314682587145285692310439845774698574848
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
,因为(正如所有其他提到的)它不适合于公共数据类型。