noaman_wgs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
* 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号))
* 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号))

 1 package com.exe10.offer;
 2 
 3 /**
 4  * 【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
 5  * 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号))
 6  *                 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号))
 7  * @author WGS
 8  *
 9  */
10 public class StrToInt {
11     boolean isValid=true;//定义个全局变量表示发生溢出
12     
13     
14     public int strToInt(String str){
15         if(str==null) return -1;    
16         long sum=0;
17         int begin=0;//起始字符
18         boolean minus=false;//默认为正号
19         if(str!=null && !str.equals("")){
20             char firstChar=str.charAt(begin);
21             if(firstChar=='+'){
22                 begin++;
23             }else if(firstChar=='-'){
24                 begin++;
25                 minus=true;//为负数
26             }
27             sum=strToInt(str,minus,begin);
28         }else{
29             //非法输入:当输入为"" 的时候
30             isValid=false;
31         }
32         //System.out.println(isValid);
33         return (int)sum;
34         
35     }
36 
37     private long strToInt(String str, boolean minus, int begin) {
38         int flag=minus?-1:1;
39         long sum=0;
40         int index=begin;
41         
42         while(index<str.length()){
43             
44             char curChar=str.charAt(index);
45             if(curChar>='0' && curChar<='9'){
46                 sum=sum*10+flag*(curChar-'0');
47                 
48                 //假如越界的话
49                 if((minus && sum<Integer.MIN_VALUE) || //MIN_VALUE==0x80000000
50                         (!minus &&sum>Integer.MAX_VALUE ))//MAX_VALUE = 0x7fffffff;
51                     return 0;                
52             }else{
53                 return 0;//字符串中只要出现不是0-9字符即返回0
54             }
55             index++;                        
56         }
57         return sum;
58     }
59 
60     public static void main(String[] args) {
61         StrToInt s=new StrToInt();
62         int num=s.strToInt("");
63         System.out.println(num);
64 
65     }
66 
67 }

 

posted on 2016-06-30 18:17  noaman_wgs  阅读(128)  评论(0编辑  收藏  举报