新的开始16219lalala

WUSTOJ 1003: atoi (II)

Time Limit: 1 Sec   Memory Limit: 128 MB   64bit IO Format: %lld
Submitted: 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;
}


        




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部