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 */
时间: 2024-12-12 08:48:38