[C++]Reverse Integer整数翻转
2015-08-24 12:43
423 查看
leetcode 原题链接:https://leetcode.com/problems/reverse-integer/
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
简要分析:此题并不难,但是要注意几个点,比如负数翻转之后还是负数,要考虑溢出的问题,这里没有说明,但是根据测试的结果,当数据溢出的时候,返回值是0。由于有数据溢出的可能性,我们这里就不能简单的用整数来表示了。可以采用一个范围更大的整数类型来表示,比如long; 或者直接采用字符串来表示,我就是采用后者来操作的。这样针对更大范围的整数只需要修改一些常量就可以通用了。
实现代码:
class Solution
{
public:
int reverse(int x)
{
string sx = "";
int flag = 1;
if (x >= 0)
{
while (x != 0)
{
sx = char('0' + x % 10) + sx;
x /= 10;
}
} else
{
flag = -1;
while (x != 0)
{
sx = char('0' - x % 10) + sx;
x /= 10;
}
}
string sr = "";
for (int i = 0; i < sx.size(); i++)
{
sr = sx[i] + sr;
}
if (flag > 0 && strCompare(sr, "2147483647"))
{
return 0;
}
if (flag < 0 && strCompare(sr, "2147483648"))
{
return 0;
}
int ans = 0;
for (int i = 0; i < sr.size(); i++)
{
ans = ans * 10 + (sr[i] - '0');
}
return flag*ans;
}
bool strCompare(string s1, string s2)
{
/*
s1 >= s2 返回true
s1 < s2 返回false
*/
if (s1.size() > s2.size())
return true;
else if (s1.size() < s2.size())
return false;
return s1 > s2;
}
};
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
简要分析:此题并不难,但是要注意几个点,比如负数翻转之后还是负数,要考虑溢出的问题,这里没有说明,但是根据测试的结果,当数据溢出的时候,返回值是0。由于有数据溢出的可能性,我们这里就不能简单的用整数来表示了。可以采用一个范围更大的整数类型来表示,比如long; 或者直接采用字符串来表示,我就是采用后者来操作的。这样针对更大范围的整数只需要修改一些常量就可以通用了。
实现代码:
class Solution
{
public:
int reverse(int x)
{
string sx = "";
int flag = 1;
if (x >= 0)
{
while (x != 0)
{
sx = char('0' + x % 10) + sx;
x /= 10;
}
} else
{
flag = -1;
while (x != 0)
{
sx = char('0' - x % 10) + sx;
x /= 10;
}
}
string sr = "";
for (int i = 0; i < sx.size(); i++)
{
sr = sx[i] + sr;
}
if (flag > 0 && strCompare(sr, "2147483647"))
{
return 0;
}
if (flag < 0 && strCompare(sr, "2147483648"))
{
return 0;
}
int ans = 0;
for (int i = 0; i < sr.size(); i++)
{
ans = ans * 10 + (sr[i] - '0');
}
return flag*ans;
}
bool strCompare(string s1, string s2)
{
/*
s1 >= s2 返回true
s1 < s2 返回false
*/
if (s1.size() > s2.size())
return true;
else if (s1.size() < s2.size())
return false;
return s1 > s2;
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二