LeetCode-7-Reverse Integer(Nmber-Strng)-Easy

来源:互联网 发布:杨君优化人生全本 编辑:程序博客网 时间:2024/05/29 13:08

题意分析:

将输入整数进行反转,如果反转后的数已超过整数范围(-2147483648~2147483647),则返回0;


解题分析:

1. 注意int32的范围越界(返回0);

2. 打印输出时避免最高位为0的情况,如00233;

4. 使用string类型标示输入和变换,规避取值范围的越界;

3.使用stringstream实现整数和string之间的转换;

5.不能使用__int64类型;


解题代码:

#include<sstream>#include<string>#include<math.h>using namespace std;#define MAX_INT32  2147483648#define SUB_MAX_INT32 147483648class Solution {private:bool isINT32(string s){int maxNumLen;if(s[0]=='-'){maxNumLen=11;}else{maxNumLen=10;}if(s.length()>maxNumLen){return false;}else if(s.length()==maxNumLen){string intS;if(s[0]=='-'){if(s[1]>'0'+2){return false;}else{intS=s[0]+s.substr(2);}}else{if(s[0]>'0'+2){return false;}else{intS=s.substr(1);}}stringstream ss;ss<<intS;int subNum;ss>>subNum;if(subNum>SUB_MAX_INT32-1 || subNum<SUB_MAX_INT32*-1){return false;}}return true;}public:    int reverse(int x) {    stringstream ss1;    ss1<<x;    string s;    ss1>>s;    cout<<"s= "<<s<<endl;    string reverseS="";    int endIndex;    if(s[0]=='-'){    reverseS+='-';    endIndex=1;    }else{    endIndex=0;    }    for(int i=s.length()-1;i>=endIndex;i--){    reverseS+=s[i];    }    cout<<"reverseS="<<reverseS<<endl;    if(isINT32(reverseS)){    stringstream ss2;    ss2<<reverseS;    int ans;    ss2>>ans;    return ans;    }else{    return 0;    }    }};

使用__int64的解题代码:

#include<sstream>#include<string>#include<math.h>using namespace std;#define MAX_INT32  2147483648class Solution {public:    int reverse(int x) {    stringstream ss1;    ss1<<x;    string s;    ss1>>s;    //cout<<"s= "<<s<<endl;    string reverseS="";    int endIndex;    if(s[0]=='-'){    reverseS+='-';    endIndex=1;    }else{    endIndex=0;    }    for(int i=s.length()-1;i>=endIndex;i--){    reverseS+=s[i];    }    __int64 i64;    //cout<<"reverseS= "<<reverseS<<endl;    stringstream ss2;    ss2<<reverseS;    ss2>>i64;    cout<<"i64= "<<i64<<endl;    if(abs(i64)<=MAX_INT32){    return (int)i64;    }    return 0;    }};


0 0
原创粉丝点击