在C中存储大量数字

pni*_*zle 1 c arrays numbers

我有以下代码,我有一个数组.我向该数组添加了一个大数字,但是在打印时,它会显示一个较小的,不正确的值.为什么会这样,有没有办法解决这个问题?

int x[10];
x[0] = 252121521121;
printf(" %i " ,  x[0]);   //prints short wrong value
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 5

你的号码需要38位.如果您的平台int不是那么大(而且没有理由),那么这个数字就不合适了.(事实上​​,即使是int literal应该已经触发了编译器警告,假设这是C或C++.)

您可以始终使用保证大小的数据类型,如int64或类似的东西,具体取决于您的语言和平台.这里可能不需要任意精度的库.

在C中,包含<stdint.h>和使用int64_t,或者只是使用long long int,并确保从长整数文字中初始化它,例如252121521121LL.(我可能会补充说,Long longs只是最新语言标准的正式部分.)

(编辑: long long int保证至少为64位,所以它应该是一个不错的选择.)