c++ - Sort function giving floating point exception for a large input of 0's -


i have written code problem:

given list of non negative integers, arrange them such form largest number.

for example, given [3, 30, 34, 5, 9], largest formed number 9534330.

note: result may large, need return string instead of integer.

what trying achieve in code use radix sort logic on significant digit first , arranging per decreasing order. later doing second significant digit , on. have used std::sort() function passing vector of pairs, first of pair value , second of pair index. following code:

bool radixorder(pair<int,int> p1, pair<int,int> p2) {     int val1=p1.first;     int e1=p1.second;     int val2=p2.first;     int e2=p2.second;     if(val1==val2 && e1==e2)     {         return val1==val2;     }     else if(((val1/e1)%10) == ((val2/e2)%10))     {         while(val1/e1 == val2/e2)         {             if(e1/10!=0)                 e1=e1/10;             if(e2/10!=0)                 e2=e2/10;         }         return (val1/e1)%10 > (val2/e2)%10;     }     else     {         return (val1/e1)%10 > (val2/e2)%10;     } }  vector<pair<int,int> > createvnew(vector<int>& v) {     vector<pair<int,int> > temp;     for(int i=0; i<v.size(); i++)     {         cout << << endl;         int val=v[i], e=1;         if(v[i]==0)         {             temp.push_back(make_pair(val, 1));         }         else         {             while((e/v[i])==0)                 e*=10;             if(e!=v[i])             {                 temp.push_back(make_pair(val,e/10));             }             else if(e==v[i])             {                 temp.push_back(make_pair(val,e));             }         }     }     return temp; }  string largestnumber(vector<int>& v) {     int e=1;     vector< pair<int,int> > vnew=createvnew(v);     sort(vnew.begin(), vnew.end(), radixorder);     stringstream s;     for(int i=0; i<vnew.size(); i++)     {         s<<vnew[i].first;     }     return s.str(); } 

largestnumber(..) function returning desired string. code works fine non 0 inputs try. when input long vector of 0's, like:

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

it giving floating point exception.

i have tried finding solution, havent been able to. beginner in cpp, , great.

your radixsort function violates compare requirements, namely irreflexivity (that is, radixorder(x, x) must return false returns true because execution goes first if branch).

so classic example of undefined behavior here. believe piece of code should rewritten somehow like

if (e1==e2) {     return val1 > val2; } 

though, solve problem sorting input numbers strings in reverse order.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -