繁体   English   中英

大数的总和

[英]Sum of very large numbers

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

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

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

谢谢!

使用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 一个简单的授课形式: 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 long ,它支持更大的数字。 在某些编译器中,您也可以使用long long long ,但是您没有提及正在使用的编译器。

有关更多信息,请参见https://en.wikipedia.org/wiki/C_data_types

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

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

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

除此之外,您还需要一个任意精度算术软件包,例如GNU多精度库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM