新的开始16219lalala
WUSTOJ 1003: atoi (II)
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 204 Accepted: 26
[ Submit][ Status][ Web Board]
Description
实际情况中,atoi函数要考虑一些异常,fcbruce要你完成atoi函数的功能,并且处理以下异常:
如果是空串或者串中全是空格,返回0;
如果串是非法的,比如"- 1","--1",“abc”等,返回0;
如果转换的数字大于32位有符号整数,即INT_MAX (2147483647),返回INT_MAX (2147483647);
如果转换的数字小于32位有符号整数,即INT_MIN (-2147483648),返回INT_MIN (-2147483648);
没有出现异常则返回该数字的值。
提交代码时请提交main函数以外的部分,OJ将使用以下main函数检测:
int main() { char buffer[32]; while (gets(buffer) != NULL) { printf("%d\n", atoi(buffer)); } return 0; }Input
多组测试数据,每行为一个要转换的字符串(不超过32个字符)。
Output
每行输出一个转换后的结果。
Sample Input
+-0- 1
0000
01
-01
Sample Output
0
0
0
1
-1
分析:最大坑点字串前后都可以有空格哦~中间不可以有空格,采用双指针分别指向前后第一个不为零的元素再移动会更好!(我提交的这个版本写有些复杂)
#include#include int atoi(char s[]) {long long sum=0;if(strlen(s)==0)return 0;int flag=0;for(int i=0; s[i]!='\0'; i++)if(s[i]!=' ')flag=1;if(!flag)return 0;flag=0;int t;int p;int len=strlen(s);for(int i=len-1;i>=0;i--)if(s[i]!=' '){p=i;break;}for(int i=0; i<=p; i++){if(s[i]!=' '&&flag==0){flag=1;t=i;if(s[i]=='-'||s[i]=='+')continue;}if(flag){if(s[i]=='-'&&i!=t)return 0;else if(s[i]>='0'&&s[i]<='9')sum=sum*10+s[i]-'0';elsereturn 0;if(sum>=2147483647&&s[0]!='-')return 2147483647;if(s[0]=='-'&&sum>=2147483648)return -2147483648;}}if(s[t]=='-')sum=-sum;return sum; }
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
