今天的两道题关于基本数据类型的探讨,估计也是要考虑各种情况,要细致学习

7. Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321 Example2: x = -123, return -321

Have you thought about this?

Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!

If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.

Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?

For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

Update (2014-11-10): Test cases had been added to test the overflow behavior.

注:颠倒整数中的每一位,符号位保留。估计会有一些极端情况需要考虑,这里指出了几个,如,末位为0 翻转之后是什么?又如,如果翻转之后超出了数据类型的表达范围怎么办?。。。可能还会遇到其它的困难^~^

解:在考虑最值的时候必须另外定义最值为int 常量,否则的话系统会给他分配一个合适的类型

直接写成这个做判断是不可以的。

if (temp >0x7fffffff || temp < 0x80000000)
{
return result;
}

下面是提交通过的代码:

class Solution {
public:
int reverse(int x) {
int result{0};
long long temp{0};
const int max_int=0x7fffffff;// 0111 1111 1111 1111 ... 1111 32bit
const int min_int=0x80000000;//1000 0000 0000 0000 ... 0000 32bit while (x != 0)
{
temp = temp*10 + x%10;
x = x / 10;
if (temp > max_int || temp < min_int)
{
return result;
}
}
result = temp;
return result;
}
};

8. String to Integer (atoi)

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 are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10): The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

Requirements for atoi:

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

注:把一个字符串转换为整数。要考虑所有可能的输入情况。这个问题在《c++入门经典》中设计计算器时遇到过,只是当时没有细细的分析每一种情况,现在要好好看看。

解:这个简直是不可理喻,一下列举了一些可能出现的情况

input:“+ - 2”expected:0

input:“+ 01   1 2”expected:1

input:“+ + 2”expected:0

input:“-012a34”expected:12

input:"    +11191657170"expected:2147483647

代码如下,有待精简:

long long  result{ 0 };
int n{ 0 };//位数
int sign{ 1 }, p_n_flag{ 0 }, zero_flag{0};
for (string::iterator s_i = str.begin(); s_i != str.end(); s_i++)
{
if (*s_i == '-')
{
if (p_n_flag==0)
{
p_n_flag = 1;
sign = -1;
continue;
}
else
{
sign = 0;//如果出现两次被认为是非法输入
break;
}
}
if (*s_i == '+')
{
if (p_n_flag == 0)
{
p_n_flag = 1;
sign = 1;
continue;
}
else
{
sign = 0;
break;
}
}
if (*s_i == ' ')
{
if (n == 0 && zero_flag == 0 && p_n_flag==0)
{ continue; }
else
{break;}
}
if (*s_i == '0')
{
zero_flag = 1;
if (n == 0)
{continue;}
else
{
n = n + 1;
result = result * 10;
if (result > INT_MAX)
{ switch (sign)
{
case 0:return 0;
case 1:return INT_MAX;
case -1:return INT_MIN;
default:
break;
}
}
else
{continue;} }
}
if ((*s_i) > '0' && ((*s_i) < '9' || (*s_i) == '9'))
{
n = n + 1;
//result = result * 10 + ((*s_i) - 48);
result = result * 10 + ((*s_i) - '0');//最后一个括号里不用显式的值48 而是用‘0’
cout << result << endl;
if (result > INT_MAX)
{ switch (sign)
{
case 0:return 0;
case 1:return INT_MAX;
case -1:return INT_MIN;
default:
break;
}
}
}
else
{
break;
} }
result = result*sign; return result;

Leetcode 题目整理-2 Reverse Integer && String to Integer的更多相关文章

  1. Leetcode 题目整理-3 Palindrome Number & Roman to Integer

    9. Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. clic ...

  2. 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number

    [Q7]  把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...

  3. 【LeetCode】7 & 8 - Reverse Integer & String to Integer (atoi)

    7 - Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Notic ...

  4. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  5. LeetCode.8-字符串转整数(String to Integer (atoi))

    这是悦乐书的第349次更新,第374篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第4题(顺位题号是8).实现将字符串转换为整数的atoi方法. 该函数首先去掉所需丢 ...

  6. Leetcode 题目整理 climbing stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  7. Leetcode 题目整理-8 Count and Say

    38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...

  8. Leetcode 题目整理-1

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  9. 【leetcode题目整理】数组中找子集

    368. Largest Divisible Subset 题意:找到所有元素都不同的数组中满足以下规则的最大子集,规则为:子集中的任意两个元素a和b,满足a%b=0或者b%a=0. 解答:利用动态规 ...

随机推荐

  1. python写冒泡排序

    冒泡就是重复地遍历要排序的数列,一次比较两个元素(泡泡),如果他们的顺序错误就把他们交换过来,像泡泡一样,依次按照顺序上升排列. 冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大(升序) ...

  2. $loj10156/$洛谷$2016$ 战略游戏 树形$DP$

    洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...

  3. Spring的BeanPostProcessor后置处理器与bean的生命周期

    前言 本文将把Spring在Bean的生命周期中涉及到的后置处理器一一梳理出来,并简要说一下功能,至于每个后置处理器在实际扩展中的用处,还要后续慢慢探索总结. 正文 下面一步步跟进探寻那些后置处理器们 ...

  4. Linux gcc版本升级

    Linux gcc版本升级 操作环境 RHEL7,在进行内核编译时编译器版本,需要升级gcc编译器,选择gcc-8.3.0. http://ftp.gnu.org/gnu/gcc 里面提供所有的gcc ...

  5. 配置ca服务器和http,mail加密

    一·CA介绍 certificate authority   数字证书授权中心 被通信双方信任的.独立的第三方机构 负责证书颁发.验证.撤销等管理 数字证书 经证书授权中心数字签名的包含公开密钥拥有者 ...

  6. echo 传义序列

    echo 传义序列:\a 警示字符\b 退格\c 输出中忽略最后的换行符\f 清屏\n 换行\r 回车\t 水平制表符\v 垂直制表符\\ 反斜杠字符\0ddd 将字符表示成1到3位的八进制数值

  7. 第一章 概述——1.TCP/IP设计遵循的两个原则

    1.端到端原则(end-to-end principle) 当我们设计一个大的系统(如操作系统或协议族)时,随之而来的一个问题通常是在什么位置实现某个功能.影响TCP/IP协议族设计的一个重要原则是端 ...

  8. 【GeneXus】在WorkWithPlus中如何定义未被包含的页面属性?

    在使用GeneXus开发项目的过程中,有很多用户会使用到WorkWithPlus这个模板.通过WorkWithPlus的编辑器,让页面的调整变得极为简单,尤其是响应式页面.在WorkWithPlus的 ...

  9. Spring Boot2 系列教程(一) | 如何使用 IDEA 构建 Spring Boot 工程

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. Search 前言 新年立了个 flag,好好运营这个公众号.具体来说,就是每周要写两篇文章在这个号发表.刚立的 fla ...

  10. 两个关于 Java 面试的 Github 项目

    哈喽,大家好.相信大家都知道金九银十,在人才市场上是指每年的 9 月和 10 月是企业的招聘高峰期.这个时候企业往往有大量招聘需求,求职者在这个时候就找工作无疑是最适合的.需求大,谈工资什么的就更容易 ...