如何在c中打印一个非常大的值

时间:2016-07-01 09:40:52

标签: c

我是新手,如果我的问题很愚蠢,请承担。

int main()
{
  int x=60674;
  printf("%lf \n",(double)(x*x));
  printf("%lld \n",(long long)(x*x));
  return 0;
}

为什么这不起作用?

3 个答案:

答案 0 :(得分:5)

x * x溢出,所以你应该在乘法之前将它们转换为long longs

printf("%lld \n",((long long)x * (long long)x));

答案 1 :(得分:1)

另外,您可以使用标准化的商标:

#include <inttypes.h>
#include <stdio.h>

int main() {
        int x=60674;
        printf("%" PRIu64 "\n",(uint64_t)x * x);
        return 0;
}

此外,您不需要转换两个变量.. *将使用两个乘数的较大类型强加。

顺便说一下你可以使用unsigned int ..结果适合UINT_MAX,即4294967295(来自here

答案 2 :(得分:0)

x是一个有符号整数,只能保存-2,147,483,847+2,147,483,847以及执行操作时的值

    x * x
==> 60674 * 60674 = 3,681,334,276  

通常溢出整数范围。因此,您可能需要一些大数据类型来保存该计算60674 * 60674

你可以尝试两件事来做到这一点。

  1. x的数据类型从int更改为long或更多范围long long

    long long x = 60674;

  2. 键入将计算转换为长程数据类型。 printf("%lld \n",((long long)x* (long long)x));