zoukankan      html  css  js  c++  java
  • 判断 ACdream 1202 Integer in C++

    题目传送门

     1 /*
     2     分情况讨论,在long long范围里可以直接比较
     3     sscanf 直接读到n中去
     4 */
     5 #include <cstdio>
     6 #include <iostream>
     7 #include <string>
     8 #include <algorithm>
     9 #include <cstring>
    10 #include <map>
    11 #include <set>
    12 #include <vector>
    13 using namespace std;
    14 
    15 const int MAXN = 1e4 + 10;
    16 const int INF = 0x3f3f3f3f;
    17 
    18 int main(void)        //ACdream 1202 Integer in C++
    19 {
    20     //freopen ("G.in", "r", stdin);
    21 
    22     string s;    string s_max = "9223372036854775807";
    23     while (cin >> s)
    24     {
    25         long long n;
    26         int len = s.size ();
    27         if (s[0] != '-')
    28         {
    29             if (len < 19)
    30             {    
    31                 sscanf (s.c_str (), "%lld", &n);
    32                 if (n <= 32767)    cout << "short" << endl;
    33                 else if (n <= 2147483647)    cout << "int" << endl;
    34                 else    cout << "long long" << endl;
    35             }
    36             else if (len == 19)
    37             {
    38                 if (s > s_max)    cout << "It is too big!" << endl;
    39                 else cout << "long long" << endl;
    40             }
    41             else    cout << "It is too big!" << endl;
    42         }
    43         else
    44         {
    45             if (len < 20)
    46             {
    47                 sscanf (s.c_str (), "%lld", &n);
    48                 if (n >= -32768)    cout << "short" << endl;
    49                 else if (n >= 2147483647)    cout << "int" << endl;
    50                 else    cout << "long long" << endl;
    51             }
    52             else if (len == 20)
    53             {
    54                 s.erase (s.begin ());
    55                 if (s < s_max)    cout << "long long" << endl;
    56                 else    cout << "It is too big!" << endl;
    57             }
    58             else    cout << "It is too big!" << endl;
    59         }
    60     }
    61 
    62     return 0;
    63 }
    64 
    65 /*
    66 -32768 to 32767
    67 -2147483648 to 2147483647
    68 -9223372036854775808 to 9223372036854775807
    69 short, int, long long
    70 It is too big!
    71 */
     1 /*
     2     for循环保存n
     3     注意:2147483647 + 1 -> -2147483648,-2147483648 > 2147483647
     4         在二进制中并不是数学的比大小
     5 */
     6 #include <cstdio>
     7 #include <iostream>
     8 #include <string>
     9 #include <algorithm>
    10 #include <cstring>
    11 #include <map>
    12 #include <set>
    13 #include <vector>
    14 using namespace std;
    15 
    16 const int MAXN = 1e4 + 10;
    17 const int INF = 0x3f3f3f3f;
    18 
    19 int main(void)        //ACdream 1202 Integer in C++
    20 {
    21     freopen ("G.in", "r", stdin);
    22 
    23     string s;
    24     char ss[33], ss_ll1[] = "9223372036854775808", ss_ll2[] = "9223372036854775807";
    25 
    26     while (scanf ("%s", &ss) == 1)
    27     {
    28         int len = strlen (ss);    long long n;
    29         if (len > 20)    puts ("It is too big!");
    30         else if (ss[0] == '-')
    31         {
    32             if (len == 20)
    33             {
    34                 if (strcmp (ss+1, ss_ll1) <= 0)    puts ("long long");
    35                 else    puts ("It is too big!");
    36             }
    37             else if (len < 20)
    38             {
    39                 n = 0;
    40                 for (int i=1; i<len; ++i)    n = n * 10 + (ss[i] - '0');
    41                 n = -n;
    42                 if (n >= -32768 && n <= 32767)    puts ("short");
    43                 else if (n >= -2147483648 && n <= 2147483647)    puts ("int");
    44                 else    puts ("long long");
    45             }
    46         }
    47         else if (len <= 19)
    48         {
    49             if (len == 19)
    50             {
    51                 if (strcmp (ss, ss_ll2) <= 0)    puts ("long long");
    52                 else    puts ("It is too big!");
    53             }
    54             else
    55             {
    56                 n = 0;
    57                 for (int i=0; i<len; ++i)    n = n * 10 + (ss[i] - '0');
    58                 if (n >= -32768 && n <= 32767)    puts ("short");
    59                 else if (n <= 2147483647 && n >= -2147483648)    puts ("int");
    60                 else    puts ("long long");
    61             }
    62         }
    63         else    puts ("It is too big!");
    64     }
    65 
    66     return 0;
    67 }
    68 
    69 /*
    70 -32768 to 32767
    71 -2147483648 to 2147483647
    72 -9223372036854775808 to 9223372036854775807
    73 short, int, long long
    74 It is too big!
    75 */
    编译人生,运行世界!
  • 相关阅读:
    LBS 经纬度定位
    LBS 经纬度定位
    GPS定位基本原理
    GPS定位基本原理
    Android Studio 之 启动和停止服务
    Android Studio 之 启动和停止服务
    【算法】最短路——两点最短总权和
    【算法】最短路——两点最短总权和
    【郑轻】[1743]解方程
    【郑轻】[1743]解方程
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4415733.html
Copyright © 2011-2022 走看看