程序员代码面试指南刷题--第五章.将整数字符串转成整数值

题目描述
给定一个字符串str,如果str符合日常书写的整数形式,并且属于32位整数范围,返回str代表的整数值,否则返回0。
输入描述:

输出包括一行代表str(1≤length(str)≤100)(1 \leq length(str) \leq 100)(1≤length(str)≤100)。

输出描述:

输出一行,代表返回的值。

示例1

输入

123

输出

123

示例2

输入

023

输出

0

示例3

输入

A13

输出

0

示例4

输入

2147483647

输出

2147483647

示例5

输入

2147483648

输出

0

示例6

输入

-127

输出

-127

解法一:自己写的垃圾

import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int res = getNum(str);
        System.out.println(res);
    }
    public static int getNum(String str){
        if(str==null||str.length()==0) return 0;
        char first = str.charAt(0);
        if(first=='0'&&str.length()>1) return 0;
        if(!((first>='0'&&first<='9')||first=='-')) return 0;
        if(first=='-'&&str.length()==1) return 0;
        int i = first=='-'?1:0;
        long res = 0;
        char[] arr = str.toCharArray();
        for(;i<str.length();i++){
            if(!(arr[i]>='0'&&arr[i]<='9')) return 0;
            res = res*10+arr[i]-'0';
            if(res>Integer.MAX_VALUE&&first!='-'){
                return 0;
            }
            if(res>(long)Integer.MAX_VALUE+1&&first=='-'){
                return 0;
            }
        }
        return (int)(first=='-'?-res:res);
    }
}

解法二:不用long判断越界

思路: 先求负值,利用Integer.MIN_VALUE来判断

你可能感兴趣的:(程序员代码面试指南刷题)