atoi
在LintCode上刷題,刷到一道atoi,以為很簡(jiǎn)單,輕松寫完后發(fā)現(xiàn)測(cè)試用例簡(jiǎn)直喪心病狂。
也許是剛開始的思路就被局限了,于是硬著頭皮走上“添磚加瓦”的道路(其實(shí)就是加點(diǎn)if-else),最后成功AC,代碼如下:
int atoi(string &str)
{
int len = str.size();
int end = 0;
long sum = 0;
char dot_flag = 0;
int dot_loc = 0;
char minus_flag = 0;
int error_char_cnt = 0;
char MAX_flag = 0;
for(int i=len-1; i>=0; --i)
{
if(str[i] == '.')
{
sum = 0;
MAX_flag = 0;
dot_flag = 1;
dot_loc = i;
continue;
}
else if(str[i] == '-') //-符號(hào)出現(xiàn)
{
minus_flag = 1;
if(i!=0 && str[i-1]!=' ')
return 0;
else
break;
}
else if(str[i] == '+') //+符號(hào)出現(xiàn)
{
if(minus_flag)
return 0;
error_char_cnt = len-i;
if(i != 0 && str[i-1]!=' ')
{
sum = 0;
MAX_flag = 0;
}
continue;
}
else if(str[i] == ' ')
{
error_char_cnt++;
continue;
}
else if(str[i]<48 || str[i]>57)
{
error_char_cnt = len-i;
sum = 0;
MAX_flag = 0;
continue;
}
if(dot_flag == 0)
{
if(MAX_flag == 0)
sum += (str[i]-'0')*pow(10,len-1-i-error_char_cnt);
if(sum > INT_MAX && MAX_flag==0)
{
sum = INT_MAX;
MAX_flag = 1;
}
}
else
{
if(MAX_flag == 0)
sum += (str[i]-'0')*pow(10,dot_loc-1-i-error_char_cnt);
if(sum > INT_MAX && MAX_flag==0)
{
sum = INT_MAX;
MAX_flag = 1;
}
}
}
if(minus_flag == 1)
{
if(sum == INT_MAX)
sum = INT_MIN;
else
sum *= (-1);
}
return sum;
}
總結(jié)
- 上一篇: 包年套什么意思
- 下一篇: 【HTTP学习】Http协议中Cooki