判断 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 */
编译人生,运行世界!
原文地址:https://www.cnblogs.com/Running-Time/p/4415733.html