整数的倒数

整数的倒数

http://www.nowcoder.com/questionTerminal/dd63c30dfef04770b5813e63f5a2615a

题目难度:一星
考察点:字符串

方法:字符串

1.分析:

这个题的本质其实就是将一个字符串逆序输出,如果是负数的话,就将除了第0位的字符之后的剩余字符串逆序输出就可以了。那么就考虑首位是否为'-':
(1). 如果首位为'-',那么我们将i从[1, s.size()/2], 然后交换s[i], s[s.size()-i],此时就能达到除了第0位之外的剩余字符串逆序了,举个例子:
s = "-12345"
当i=1时,交换s[1]和s[5]即交换1和5,此时s="-52341"
当i=2时,交换s[2]和s[4]即交换2和4,此时s="-54321"
当i=3时,交换s[3]和s[3]即交换3和3,此时s="-54321"
为什么要计算到s.size()/2呢,那是因为考虑了s.size()为奇数的时候。
比如s="-1234"
当i=1时,交换s[1]和s[4]即交换1和4,此时s="-4231"
如果不考虑s.size()/2=2,那么此时就已经结束循环了,但是这样是不对的,所以要考虑s.size()/2。
即当i=2时,交换s[2]和s[3]即交换2和3,此时s="-4321"
(2). 如果首位不是'-',即是一个正数那么就正常逆序就可以了。

算法实现:
(1). 输入一个字符串s。
(2). 判断首位是否为'-',然后根据上述逆序输出字符串

2.复杂度分析:

时间复杂度:O(n) 
空间复杂度:O(n)

3.代码: 

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s; cin>>s;
    if(s[0] == '-') for(int i=1; i<=s.size()/2; i++) swap(s[i], s[s.size()-i]);
    else for(int i=0; i<s.size()/2; i++) swap(s[i], s[s.size()-1-i]);
    cout<<s<<endl;
    return 0;
}


全部评论

相关推荐

11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务