非常大数的总和

时间:2017-09-21 19:42:17

标签: c

所以我想知道如何获得非常大的数字(10或更多)的总和。 例如:

number1 = 10481481258125812;
number2 = 10041284812488248;
number3 = 10041248812482488;

我想添加这些数字并存储到一个名为sum的变量中,但我以前从未在C中使用如此大的数字。

谢谢!

5 个答案:

答案 0 :(得分:3)

使用64位intiger

如果要使用小于64位的数字,可以使用int64_t / uint64_t / long long。 这些类型的最大尺寸:

  • int64_t:2 ^ 63 - 1 = 9,223,372,036,854,775,807
  • uint64_t:2 ^ 64 -1 = 18,446,744,073,709,551,615

int64_t和uint64_t在stdint.h

定义

使用gmplib

如果您想使用更大的号码,可以使用GMPlib。一个简单的tutrial:https://www.cs.colorado.edu/~srirams/courses/csci2824-spr14/gmpTutorial.html

答案 1 :(得分:1)

试试这个:

#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);

}

答案 2 :(得分:0)

使用支持更大数字的long long。在某些编译器中,您也可以使用long long long,但是您没有提到您正在使用的编译器。

有关详细信息,请参阅https://en.wikipedia.org/wiki/C_data_types

答案 3 :(得分:0)

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);
}

答案 4 :(得分:0)

类型long long被指定为具有至少63个值位和unsigned long long 64个值位。

有些编译器(gcc和clang)支持更大的整数类型,其中128位为__int128__int128_t__uint128__uint128_t。这些是非标准类型,C库通常不支持它们,因此您需要自己在字符串之间编写转换函数。

除此之外,您还需要一个Arbitrary Precision Arithmetic包,例如GNU multiple precision library