c++ - 我不知道如何存储表示为字符串的大量大数字

标签 c++ arrays string data-structures biginteger

我正在做一个关于算法和数据结构主题的大学项目,其中我必须处理非常大的整数并用它们执行操作。 我将数字实现为字符串,然后实现了不同的操作函数。 问题是当输入数据数量太大时,应用程序会继续运行而不会出现任何错误。

我试图理解发生这种情况的原因,并且我做了一个小主程序,其中我只将大数字作为字符串并将它们存储在动态数组中,然后打印它们,但即使如此,它也会继续运行而不停止。

int main(int argc, const char * argv[]) {
    int numOfNumbers;
    int numbersAdded=0;
    string input;
    string * arrayStrings;

    cin>>numOfNumbers;
    arrayStrings = new string[numOfNumbers];

    while(numbersAdded<numOfNumbers){
        cin>>input;
        arrayStrings[numbersAdded]=input;
        numbersAdded++;
    }

    for( int i = 0;i<numOfNumbers;i++){
        cout<<arrayStrings[i]<<endl;
    }
    delete arrayStrings; 
    return 0;
}

让您被捕的条目示例是:

100
1755128662250792726817307299021171022405
31602321932429919472347573932692115431
268613145625556
250995805115735123
2899821022216164821112051434821414118992115
27037278211962523201109134711837128617
279861141430143181518313
2556629007151952158131140
1196912232195651587224241
25217152742925013174325932918818704
127821054
253383867323001191423791
12348974130864
244901178019747324332994326262233310788
18871141121893613802910810566
298051220827966
22834322993767274181806121073176276959
12172351826990186206862376618791364
265732764173081220829716267442977319643273552225
24918204792116219043248262793915692401
1305831542
30700176671024343283713253592324315123
9631
1804116485164091127419645307015708
29922293842728930729216901755925702294991697
312452939618283102002333813782
97001726910215
23089
2228413461326671224530389
50281073851141324619663888524356
205537847
4387273422883676941299220683242529040
1068826033659423960273693499146131576
2353678092237010742
567428219113142508327393933916217
17519165136816290383310
171663253627992516622113674
13381174435173157252769015538248512802226982
18939548432449863556502935431668
227241606761772096923316172751849825321
28694
261158777214625061325511618639
26145245508605217823270225534
9144465612451
402063232412328332621313454157147811593510403
2974732438266188181
1971018749
2608143554273201627901930612227
167113264813914100695502
239491554826951684320992306102348527205832624426
322822701797512490321722
1222658617674291042489030110130720373
1918462976913296498889758915077263829448
272293167524341951427352662028327883857012375
174729150
1883623593305601460321897187512426209633019
8429505540641879120482112152815831074
2911590820561533087024079274326803
231262255129369314921398
30218
6853262887099
2979341273197322453071355192052510086228731082
6438195802600523532253931662830115
21455231162900119942
1839328344472262818266
2268711331105532851514258226702715029956686
1381271732204670982604920683
1750956011825180313080759535309
18306484
16752289242081714613984029594732346411804
269183243217101651922759
131903520
229283615302493931
25763
364627483502384441528056209239724
354632628
3536258474331130602772228026
287381151832596
28131307231326253372981510017858241118521
169071469721153
7226251212711565303162629173113572719
258312380924193826615620250272436820120
160731153614188
2355415899121291505218690251982485
2945329191793126217
199711279824919481281127503728828878916664
1846726425647269211818
2465830451616236642298932066180323217722337
2429926243493098211362313209
165211048224556263776021
7241210514
225393969266532086311050200721609924062
2391931833136282025125495
2211530320
15811209652225412597
104015738152769143240341892186871702212318
101430481142326694
327164589132301399725305
606829769525
136531485572681027581483494522825242

最佳答案

我建议不要使用字符串来存储数字。在您的上下文中,字符串将占用更多空间并且操作速度会很慢。

假设您要存储数字 12345678901234567890。现在,如果您想使用字符串存储该数字,则需要 20 个字节(使用 8 位字符)。 字符串s =“12345678901234567890”;

您可以使用无符号整数数组来代替。在大多数现代编译器和计算机体系结构中,整数为 4 字节。所以它们可以表示 4,294,967,295 之前的数字。 现在让我们考虑可以用无符号整数表示的最大数字是十进制(所有数字都是九)是999,999,999。如果现在使用整数数组,则只需要 3 个整数。这是 12 个字节。 无符号整数数字[] = {234567890, 345678901, 12};

现在考虑简单的算术运算加法。 无符号整数 number1[] = {123456789, 123456789}; 无符号整数 number2[] = {987654321, 987654321}; 现在,如果您想将以上两个数字相加,您只需进行 2 次迭代即可得到答案。

如果你达到了位级别,你还可以进一步压缩完成的内存占用。这将是有点乏味的工作,但你会得到最好的表现。

关于c++ - 我不知道如何存储表示为字符串的大量大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952513/

相关文章:

c++ - 我的程序有什么错误?

python - 重新编号数组中元素的有效方法

java - 如何按属性搜索对象数组 (Java)

java - 比较 LinkedList 中的 int 和 String

c++ - 通用 VC++ 与 g++ 查询

c++ - 如何在C/C++中使用源代码级多线程?

c++ - 你如何在 C++ 中模块化地构建应用程序

c++ - 在 C++ Win32 中获取计算机上的用户配置文件列表

php - 循环并将PHP多维数组插入mysql

java - 将两个逗号分隔的字符串转换为 Map