leetcode:atoi
2014-12-14 12:32 MengYu1 阅读(125) 评论(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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步