zoukankan      html  css  js  c++  java
  • 剑指Offer

    剑指Offer - 九度1508 - 把字符串转换成整数
    2014-02-06 23:46
    题目描述:

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

    输入:

    输入可能包含多个测试样例。
    对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000)。

    输出:

    对应每个测试案例,
    若输入为一个合法的字符串(即代表一个整数),则输出这个整数。
    若输入为一个非法的字符串,则输出“My God”。

    样例输入:
    5
    -5
    +8
    
    样例输出:
    5
    -5
    8
    题意分析:
      给定一个字符串,判断是否表示一个有效的整数。注意以下几点即可:
        1. 判断非法字符,只有数字和
        2. 正负号只能出现在第一位,也不能多次出现。
        3. 数字范围得控制,超出了INT_MIN或是INT_MAX的话得判定为非法。
      时间复杂度为O(n),n为字符串长度,空间复杂度O(1)。
     1 // 688177    zhuli19901106    1508    Accepted    点击此处查看所有case的执行结果    1020KB    1323B    0MS
     2 // 201401311802
     3 #include <climits>
     4 #include <cstdio>
     5 #include <cstring>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int i;
    11     char s[100];
    12     int len;
    13     long long int n;
    14     int flag;
    15     bool suc;
    16 
    17     // don't use "while (gets(s) != NULL)"!
    18     while (scanf("%s", s) == 1) {
    19         len = strlen(s);
    20         suc = true;
    21         do {
    22             if (len <= 0) {
    23                 suc = false;
    24                 break;
    25             }
    26 
    27             if (len == 1 && (s[0] == '+' || s[0] == '-')) {
    28                 suc = false;
    29                 break;
    30             }
    31 
    32             for (i = 0; i < len; ++i) {
    33                 if (s[i] == '-' || s[i] == '+') {
    34                     if (i != 0) {
    35                         suc = false;
    36                         break;
    37                     }
    38                 } else if (!(s[i] >= '0' && s[i] <= '9')) {
    39                     suc = false;
    40                     break;
    41                 }
    42             }
    43             if (!suc) {
    44                 break;
    45             }
    46             if (s[0] == '-') {
    47                 flag = -1;
    48                 n = 0;
    49             } else if(s[0] == '+') {
    50                 flag = +1;
    51                 n = 0;
    52             } else {
    53                 flag = +1;
    54                 n = (s[0] - '0');
    55             }
    56             for (i = 1; i < len; ++i) {
    57                 n = n * 10 + (s[i] - '0');
    58                 if (n > 10000000) {
    59                     suc = false;
    60                     break;
    61                 }
    62             }
    63             n = n * flag;
    64             if (n == 0) {
    65                 suc = false;
    66                 break;
    67             }
    68         } while (0);
    69         if (suc) {
    70             printf("%lld
    ", n);
    71         } else {
    72             printf("My God
    ");
    73         }
    74     }
    75 
    76     return 0;
    77 }
  • 相关阅读:
    个人博客05
    个人随笔04
    ELK-Kibana汉化
    Centos7下使用mail发送邮件
    使用Docker搭建Tomcat运行环境
    Jenkins添加maven插件
    linux下安装nodejs及npm
    服务器重启后Jenkins项目部分丢失问题解决方法
    【linux】如何查看文件的创建、修改时间
    禅道
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3539116.html
Copyright © 2011-2022 走看看