注意:
32位整数值的范围 [-2147483648, 2147483647]
超出这个范围的,输出0// // main.cpp // 将整数字符串转成整数值 // // Created by zjl on 16/8/13. // Copyright © 2016年 zjl. All rights reserved. // #include <iostream> #include <string> using namespace std; bool isvalid(string s){ if(s[0] != '-' && (s[0] < '0' || s[0] > '9')) return false; if(s[0] == '-' && (s.size() == 1 || s[1] == '0')) return false; if(s[0] == '0' && s.size() > 1) return false; for(int i = 1; i < s.size(); i++){ if(s[i] < '0' || s[i] > '9') return false; } return true; } //32位整数值的范围 [-2147483648, 2147483647] int change(string s){ if(s.size() == 0 || s == "") return 0; if(!isvalid(s)) return 0; bool posi = (s[0] == '-') ? false : true; int minq = INT32_MIN / 10; int minr = INT32_MIN % 10; int sum = 0; int cur = 0; for(int i = posi?0:1 ; i < s.size(); i++){ cur = '0' - s[i]; if(sum < minq || (sum == minq && cur < minr)) //会溢出 return 0; sum = sum * 10 + cur; } if(posi && sum == INT32_MIN) return 0; //不能转 return posi ? -sum : sum; } int main(int argc, const char * argv[]) { // insert code here... string s; while(cin >> s){ int res = change(s); cout << s << " : " << res << endl; } return 0; }
程序输入输出:
a14
a14 : 0
-13fed
-13fed : 0
-28462
-28462 : -28462
-2147483649
-2147483649 : 0
-2147483647
-2147483647 : -2147483647
2147483648
2147483648 : 0