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

判断 ACdream 1202 Integer in C++的相关文章

判断Integer值相等最好不用==(未整理)

今天在开发中判断两个Integer值相等, Integer a = 3; Duixiang duixiang = new Duixiang(); duixiang = DAO.getDuixiang(); Integer b = duixiang.getB(); System.out.print(a == b);System.out.print(a.equals(b)); 发现a==b时,为false,a.equals(b)为true. 后来发现因为我b的值是从数据中拿出的一个对象的值.a和b的

判断Integer值相等不能用==

今天在开发中判断两个Integer值相等, Integer a = 3; Duixiang duixiang = new Duixiang(); duixiang = DAO.getDuixiang(); Integer b = duixiang.getB(); System.out.print(a == b);System.out.print(a.equals(b)); 发现a==b时,为false,a.equals(b)为true. 后来发现因为我b的值是从数据中拿出的一个对象的值.a和b的

String to Integer——考虑多种情况的字符串转换算法

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41521063 Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what

【LeetCode-面试算法经典-Java实现】【007-Reverse Integer(翻转整数)】

[007-Reverse Integer(翻转整数)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 题目大意 输入一个整数对其进行翻转 解题思路 通过求余数求商法进行操作. 代码实现 public class Solution { public int reverse(int x)

【LeetCode】008 String to Integer (atoi)

题目:LeetCode 008 String to Integer 题意:完成内置函数atoi的功能,将字符串转换成整数. 教训:一开始理所应当的随便一写,然后发现有很多的异常情况需要处理.然后按照C++ Reference中关于atoi的规定一条一条写,才AC.另外还有一个溢出的问题,一开始以为int会自动处理直接返回边界值,其实不是,如果溢出的话大于2147483647的数会给变成负数,因此要单独判断是否会大,但是设置成longlong 之后出现的问题是,还有可能会溢出longlong,所以

Java 身份证判断性别获取年龄

import com.alibaba.fastjson.JSON; import org.junit.Test; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @author ceshi * @Title: CardJunitTest * @ProjectName CardJunitTest * @Description

乘风破浪:LeetCode真题_007_Reverse Integer

乘风破浪:LeetCode真题_007_Reverse Integer 一.前言 这是一个比较简单的问题了,将整数翻转,主要考察了取整和取余,以及灵活地使用long型变量防止越界的问题. 二.Reverse Integer 2.1 问题理解 2.2 问题分析与解决    可以看到通过简单地取整和取余运算就能得到答案,但是需要注意越界问题,使用long在Java中8个字节的特性来完成越界检查和处理.    我们的算法: public class Solution { /** * <pre> *

代码优化(长期更新)

前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化的目标是:

使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法

当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType="int"> SELECT id FROM user WHERE userName = #{userName} </select> 会报错如下: org.springframework.web.util.NestedServletException: Request p