【发布时间】:2017-09-21 19:42:17
【问题描述】:
所以我想知道如何获得非常大的数字(10 或更多)的总和。 例如:
number1 = 10481481258125812;
number2 = 10041284812488248;
number3 = 10041248812482488;
我想将这些数字相加并存储到一个名为 sum 的变量中,但我以前从未在 C 语言中处理过如此大的数字。
谢谢!
【问题讨论】:
标签: c
所以我想知道如何获得非常大的数字(10 或更多)的总和。 例如:
number1 = 10481481258125812;
number2 = 10041284812488248;
number3 = 10041248812482488;
我想将这些数字相加并存储到一个名为 sum 的变量中,但我以前从未在 C 语言中处理过如此大的数字。
谢谢!
【问题讨论】:
标签: c
如果你想使用小于 64 位的数字,你可以使用 int64_t / uint64_t / long long。 这些类型的最大尺寸:
int64_t 和 uint64_t 定义在stdint.h
如果你想处理更大的数字,你可以使用GMPlib。一个简单的教程:https://www.cs.colorado.edu/~srirams/courses/csci2824-spr14/gmpTutorial.html
【讨论】:
试试这个:
#include <stdio.h>
int main ()
{
long long number1 = 10481481258125812;
long long number2 = 10041284812488248;
long long number3 = 10041248812482488;
long long sum = number1 + number2 + number3;
printf("sum : %lld",sum);
}
【讨论】:
long 不保证为 64 位。
long 通常与 int 长度相同。当您对必须表示的数据大小有特定要求时,最好使用 stdint.h 库和 int64_t 等类型,因为它可以便携地确保满足要求。
使用支持更大数字的long long。在某些编译器中你也可以使用long long long,但是你没有提到你正在使用的编译器。
【讨论】:
long long long的特定编译器吗?它在哪个平台上运行?维基百科文章没有提到类型。
unsigned long long 可以处理如此大的数字,最多至少 64 位:
#include <stdio.h>
int main() {
unsigned long long number1 = 10481481258125812;
unsigned long long number2 = 10041284812488248;
unsigned long long number3 = 10041248812482488;
unsigned long long sum = number1 + number2 + number3;
printf("sum: %llu\n", sum);
}
【讨论】:
unsigned long long建议"%llu"
类型 long long 被指定为具有至少 63 个值位和 unsigned long long 64 个值位。
一些编译器(gcc 和 clang)支持更大的 128 位整数类型,如 __int128 或 __int128_t 和 __uint128 或 __uint128_t。这些是非标准类型,C 库通常不支持它们,因此您需要自己编写与字符串之间的转换函数。
除此之外,您还需要一个 Arbitrary Precision Arithmetic 包,例如 GNU multiple precision library。
【讨论】: