将整数字符串转成整数值--《程序员代码面试指南》p249

    xiaoxiao2024-11-29  8

    注意:

    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

    转载请注明原文地址: https://ju.6miu.com/read-1294104.html
    最新回复(0)