题目大意:
对于传入的字符串,将其转换成为对应的整数值,注意有非数字输入时将第一个非数字输入往后的所有输入无视
注意处理开头的空格,无视掉这些空格
然后就是开头可能有正负号
大致思路:
知道了在非法字符之后的串是无视掉的之后不是很难
做这个题顺便回忆了一下long long强制类型转换成为int的时候的过程
由于是强制截断取了long long的后半段的位来当作int,当long long型的某个值不超过int的时候,强制截断得到的数刚好是相同的,但是当这个值超过int范围时,强制转换得到的值是long long表示下后32位截断的值(补码表示)
代码如下:
Result : Accepted Time : 8 ms
class Solution {
public:
int myAtoi(string str) {
if(str.empty()) return 0;
bool positive = true;
int sz = str.size();
int now = 0;
while(now < sz && str[now] == ' ') now++;
if(str[now] == '-') positive = false, now++;
else if(str[now] == '+') now++;
long long ans = 0;
if(positive){
while(now < sz && str[now] <= '9' && str[now] >= '0'){
ans = ans*10 + str[now] - '0';
if(ans >= 0x000000007fffffff) ans = 0x000000007fffffff;
now++;
}
return (int)ans;
}else{
while(now < sz && str[now] <= '9' && str[now] >= '0'){
ans = ans*10 + str[now] - '0';
if(ans >= 0x0000000080000000) ans = 0x0000000080000000;
now++;
}
return (int)-ans;
}
}
};