zoukankan      html  css  js  c++  java
  • Solution 20: 字符串转整数问题

    问题描述

    输入一个表示整数的字符串,把该字符串转成整数输出。

    解决思路

    考虑如下情况:

    (1) 符号位;

    (2) 是否溢出?溢出后的处理;

    (3) 对于不合法的输入的处理。

    程序

    1. 假设输入合法

    public class Atoi {
    public int transToInt(String s) {
    	if (s == null || s.length() == 0) {
    		 return 0;
    	}
    
    	boolean pos = true;
    	int i = 0;
    	char bc = s.charAt(0);
    	
    	if (bc == '+' || bc == '-') {
    		++i;
    		pos = bc == '-' ? false : true;
    	}
    	
    	s = s.substring(i); // remove begin sign
    	int sum = 0;
    	int base = 10;
    	
    	for (i = 0; i < s.length(); i++) {
    		sum = sum * base + (s.charAt(i) - '0');
    	}
    	
    	return pos ? sum : -sum;
    }
    }
    

    2. 假设输入不一定合法

    public int transToIntCheckIllegal(String s) throws Exception {
    	if (s == null || s.length() == 0) {
    		 return 0;
    	}
    
    	boolean pos = true;
    	int i = 0;
    	char bc = s.charAt(0);
    	
    	if (bc == '+' || bc == '-') {
    		++i;
    		pos = bc == '-' ? false : true;
    	}
    	
    	s = s.substring(i); // remove begin sign
    	long sum = 0;
    	int base = 10;
    	
    	for (i = 0; i < s.length(); i++) {
    		char c = s.charAt(i);
    		if (!(c >= '0' && c <= '9')) {
    			throw new Exception("Error: Illegal input!");
    		}
    		sum = sum * base + (c - '0');
    	}
    	
    	if (pos && sum >= Integer.MAX_VALUE) {
    		return Integer.MAX_VALUE;
    	}
    	if (!pos && -sum <= Integer.MIN_VALUE) {
    		return Integer.MIN_VALUE;
    	}
    	
    	return (int) (pos ? sum : -sum);
    }
    
  • 相关阅读:
    redis 之redis集群与集群配置
    redis 之redis-sentinel主从复制高可用
    Python 基础之函数的嵌套与nonlocal修改局部变量及闭包函数
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4629346.html
Copyright © 2011-2022 走看看