leetcode:atoi
2014-12-14 12:32 MengYu1 阅读(124) 评论(0) 编辑 收藏 举报转换原则:忽略前导空格,从+-或数字开始转换,中间出现非数字break,注意判断乘法加法溢出,大于INT_MAX输出INT_MAX,小于INT_MIN输出INT_MIN
int atoi(const char *str) { if (str==NULL) { return 0; } int ans=0,pos=1,pre; while (*str==' '|| *str=='\t') ++str; if (*str=='-'){ pos=-1; ++str; } else if (*str=='+') { pos=1; ++str; } if (!isdigit(*str)) return 0; ans=(*str-'0')*pos; ++str; for (;*str!='\0';++str){ if (isdigit(*str)){ pre=ans; if (pos==1&&pre>INT_MAX/10){ ans=INT_MAX; break; } if (pos==-1&&pre<INT_MIN/10){ ans=INT_MIN; break; } pre=ans*10; ans=ans*10+(*str-'0')*pos; if (pos==1&&ans<pre){ ans=INT_MAX; break; } if (pos==-1&&ans>pre){ ans=INT_MIN; break; } } else break; } return ans; }