445.数字反转(本蒟蒻的第一篇题解,不足之处望dalao们多多包涵)
题目描述
在这里我不再赘述,原题链接
https://www.acwing.com/problem/content/447/
样例
1.
Input:123
Output:321
2.
Input:-380
Output:-83
算法1
根据算法标签用字符串
很简单,就是判断这个数是否为负数或零,然后特殊处理
时间复杂度
$O(n)$
参考文献
需要用到STL中的reverse()函数,相关链接:
https://blog.csdn.net/weixin_46024428/article/details/116094154
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string s;
int main()
{
getline(cin, s);
if (s == "0") //判断是否为零
{
cout << 0;
return 0;
}
if (s[0] == '-') //判断是否为负数
{
reverse (s.begin() + 1, s.end()); //STL大法好(记得+1!不然会把负号也同样反转了)
cout << '-';
int i = 1; //这里我们已经把负号输出了,所以下标初始值应该是1
while (s[i] == '0') i ++; //统计最后一个0出现的位置
cout << s.substr(i, s.size()); //从s的第i个,也就是最后一个0的位置开始输出
}
else
{
reverse(s.begin(), s.end());
int i = 0;
while (s[i] == '0') i ++;
cout << s.substr(i, s.size());
}
return 0;
}
算法2
根据题意用整数
没啥可好说的QwQ
时间复杂度
$O(n)$
参考文献
无……
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int num, s, t;
int main()
{
cin >> num;
/*整数算法不用判断是否为零,因为下面的while语句会不成立,直接跳过,然后return 0*/
if (num < 0)
{
cout << '-';
num = -num;
}
while (num != 0) //这段代码是逐渐取出num的各位组成一个新的数t
{
s = num % 10;
t = t * 10 + s;
num /= 10;
}
/*神奇的是和字符串不一样,不需要判断首位是否为零,因为零在while语句里面被自动剔除了*/
/*当num的最后几位为零的时候,t = 0 * 10 + 0 = 0,所以零就自然的毛有啦*/
cout << t;
return 0;
}