Msgstr "Прервать сигнал от abort (3) (SIGABRT)".Почему только в некоторых случаях? - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь сформировать наибольшее число из элементов массива.Моя реализация, приведенная ниже, работает нормально для некоторых случаев, а для некоторых других она дает ошибку «Прервать сигнал от abort (3) (SIGABRT)».Зачем?Помоги мне!

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

int main() {
int t;
cin>>t;
while((t--)>0){
    int n;
    cin>>n;
    int a[n];
    string s="";
    for(int i=0;i<n;i++){
        cin>>a[i];
        if(i==0){s+=to_string(a[i]); continue;}
        string s1 = s+to_string(a[i]); //sX
        string s2 = to_string(a[i])+s; //Xs

        if(stoi(s1)>=stoi(s2))s=s1;
        else s = s2;
    }
    cout<<s<<endl;
    }

return 0;
 } 

В следующем случае мой код выдает ошибку

4                  //size of array
54 546 548 60      //elements of array

1 Ответ

0 голосов
/ 22 мая 2018

Это связано с тем, что функция Stoi не работает с очень большим числом для преобразования строки в int. Используйте

. Ручное преобразование строки в int. Алго выглядит так:

int x=0; // may take long long 
for(int i=0;i<s.length();i++)
x=x*i+s[i]-'0';

x является значением int строки.

...