将大整数打印为指数函数
Print large integer as exponential function
我想以指数形式打印一个巨大的整数。像
Value 123456789012 as exp is 1.2345*10^12.
是否有任何 gmp_printf 格式来处理这个问题,或者我应该先用一些 mpz_get_exp 函数计算它?
mpz_t integer;
mpz_t exponent;
mpf_t top;
mpz_inits(integer, exponent, null);
mpf_init(top);
mpz_set_str(integer, "123456789012", 10);
???
gmp_printf("Value %Zd as exp is %.4Ff*10^%Zd",
integer, top, exonent);
gmplib 文档似乎表明 %e
或 %E
printf 选项应该可以正常工作。这些以科学记数法打印。
gmp_printf("%e", integer);
%Fe
或 %FE
格式说明符需要 mpf_t
类型的对象。因此,您需要为 gmp_printf()
创建临时变量。例如:
#include <stdio.h>
#include <gmp.h>
int main(void)
{
mpz_t integer;
mpz_init_set_str(integer, "123456789012", 10);
/* Print integer's value in scientific notation */
{
mpf_t tmp_float;
mpf_init(tmp_float);
mpf_set_z(tmp_float, integer);
gmp_printf("%.4FE\n", tmp_float);
mpf_clear(tmp_float);
}
mpz_clear(integer);
return 0;
}
结果为:
1.2346E+11
或者您可以通过 mpz_get_d
将其导出到 POD double
并通过普通方式打印 printf()
:
#include <stdio.h>
#include <gmp.h>
int main(void)
{
mpz_t integer;
mpz_init_set_str(integer, "123456789012", 10);
printf("%.4E\n", mpz_get_d(integer));
mpz_clear(integer);
return 0;
}
我更喜欢第二种方法,因为它看起来更干净。
我想以指数形式打印一个巨大的整数。像
Value 123456789012 as exp is 1.2345*10^12.
是否有任何 gmp_printf 格式来处理这个问题,或者我应该先用一些 mpz_get_exp 函数计算它?
mpz_t integer;
mpz_t exponent;
mpf_t top;
mpz_inits(integer, exponent, null);
mpf_init(top);
mpz_set_str(integer, "123456789012", 10);
???
gmp_printf("Value %Zd as exp is %.4Ff*10^%Zd",
integer, top, exonent);
gmplib 文档似乎表明 %e
或 %E
printf 选项应该可以正常工作。这些以科学记数法打印。
gmp_printf("%e", integer);
%Fe
或 %FE
格式说明符需要 mpf_t
类型的对象。因此,您需要为 gmp_printf()
创建临时变量。例如:
#include <stdio.h>
#include <gmp.h>
int main(void)
{
mpz_t integer;
mpz_init_set_str(integer, "123456789012", 10);
/* Print integer's value in scientific notation */
{
mpf_t tmp_float;
mpf_init(tmp_float);
mpf_set_z(tmp_float, integer);
gmp_printf("%.4FE\n", tmp_float);
mpf_clear(tmp_float);
}
mpz_clear(integer);
return 0;
}
结果为:
1.2346E+11
或者您可以通过 mpz_get_d
将其导出到 POD double
并通过普通方式打印 printf()
:
#include <stdio.h>
#include <gmp.h>
int main(void)
{
mpz_t integer;
mpz_init_set_str(integer, "123456789012", 10);
printf("%.4E\n", mpz_get_d(integer));
mpz_clear(integer);
return 0;
}
我更喜欢第二种方法,因为它看起来更干净。