wazeeer
wazeeer

Reputation: 317

Why is this string to integer conversion function off by 1?

I have written this function that converts a string to an integer. But there seems to be an error which i cant figure out. When i compile my output is 645.

int s2i(string s){
   int index_limit = s.length() -1;
   return s2i(s, index_limit, 0,0);
}

int s2i(string s, int index_limit, int sum, int index){
   if(index == s.length()) return sum;
   int value = static_cast<int>( s[index] - '0');
   sum += value * pow(10,index_limit);

   return s2i(s, --index_limit, sum, ++index);
}

int main(){
   string s = "646";
   int val = s2i(s);
   cout << val;

   return 0;
}

Upvotes: 1

Views: 91

Answers (1)

R Sahu
R Sahu

Reputation: 206557

You are most likely losing some accuracy in the call to pow. Instead of pow, use an integer multiplier.

int s2i(string s, int index, int sum, int mult){
   if(index < 0) return sum;
   int value = static_cast<int>( s[index] - '0');
   sum += value * mult;

   return s2i(s, --index, sum, mult*10);
}

int s2i(string s){
   int index_limit = s.length() -1;
   return s2i(s, index_limit, 0, 1);
}

Upvotes: 3

Related Questions