8. String to Integer (atoi)

def solve(num_str):
    MAX, MIN = 65535, -65536
    num_str_len = len(num_str)
    i = 0
    while num_str[i] == ' ':
        i += 1
    if i == num_str_len:
        return 0
    is_neg = True if num_str[i] == '-' else False
    i += 1
    ans = 0
    is_valid = True
    while i < num_str_len:
        if num_str[i] < '0' or num_str[i] > '9':
            print 'err'
            is_valid = False
            break
        if not is_neg and ans > (MAX - (int(num_str[i]) - int('0'))) / 10:
            return MAX
        if is_neg and ans > (-MIN - (int(num_str[i]) - int('0'))) / 10:
            return MIN
        ans = ans * 10 + int(num_str[i]) - int('0')
        i += 1

    if is_valid:
        return ans if not is_neg else -ans
    return 0


print solve('   -65537fa')

 

posted @ 2018-08-18 11:17  geeklove  阅读(110)  评论(0编辑  收藏  举报