判断 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 */

 

你可能感兴趣的:(Integer)