Нуу, например:
int L=strlen(str)-1;
bool Minus=(str[0]=='-');
int S=0;
for(int i=L,mul=1;i>=Minus;i--,mul*=10)
S+=((str[i]-48)*mul);
S*=1-2*Minus;
Студентам могут попасться дополнительные детали: наличие буквенного мусора в числе, формальных знаков в начале (+) и т.п. Т.е. можно придумать оптимизацию под конкретику (тот же 1-2* вполне можно заменить тернарной конструкцией). Наиболее распростраённые промахи:
1) перебор от начала к концу строки: придётся посчитать тяжёлый множитель через pow, который на каждой итерации ещё и делить на 10 (хотя умножение - при движении в другую сторону - будет быстрее);
2) неиспользование прошлых результатов: вычисление множителя через pow на каждой итерации.
Или вот задание:
генерировать имена файлов типа
file000.bmp,file001.bmp...
Некоторые тоже через itoa фигачат, каждую итерацию теребя дополнительные буферы и делая стркаты, хотя это можно сделать простой манипуляцией, переделывая один буфер.