整数的倒数

整数的倒数

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;
}


全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务