如何在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() { }
启动程序。规范要求您使用 int
或 void
.
您必须找到一些可以为您进行计算的库。
之所以在 power
中打印一个不同于 main
的原因是因为 power
的 return 类型是 int
。结果,该值被截断为适合 int
.
的值
将 return 类型更改为 double
,使其与您正在使用的变量类型匹配,您将获得预期的结果。
double power(double base,int ex)
正如其他人所提到的,这么大的数字超出了 int
的范围,并且 大多数 这个大小的数字无法在 double
。然而,在这种特殊情况下,因为您正在计算的数字是 2 的幂,所以 可以 准确表示。如果您选择了除 2(或 2 的幂)之外的基数,结果将不准确。
我试图在 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() { }
启动程序。规范要求您使用 int
或 void
.
您必须找到一些可以为您进行计算的库。
之所以在 power
中打印一个不同于 main
的原因是因为 power
的 return 类型是 int
。结果,该值被截断为适合 int
.
将 return 类型更改为 double
,使其与您正在使用的变量类型匹配,您将获得预期的结果。
double power(double base,int ex)
正如其他人所提到的,这么大的数字超出了 int
的范围,并且 大多数 这个大小的数字无法在 double
。然而,在这种特殊情况下,因为您正在计算的数字是 2 的幂,所以 可以 准确表示。如果您选择了除 2(或 2 的幂)之外的基数,结果将不准确。