数字逆转PKUONline Judge

困扰我多年的眼疾!!何时能好!!

题目是这样的

3:数字反转

总时间限制: 
1000ms 
内存限制: 
65536kB
描述

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入
输入共 1 行,一个整数N。

-1,000,000,000 ≤ N≤ 1,000,000,000。
输出
输出共 1 行,一个整数,表示反转后的新数。
样例输入
样例 #1:
123

样例 #2:
-380
样例输出
样例 #1:
321

样例 #2:
-83
来源
NOIP2011复赛 普及组 第一题

这道题一看,诶,就很舒服,
一做,卧槽,耗时一下午,没办法没办法,谁叫我瞎呢
思路是这样的,有两种特殊情况,那我单独讨论嘛
1尾数有0
2负数

首先判断是不是负数,如果是,迭代器往后走一个,走到数字位,
 然后reverse(才不会告诉你们我不会自己写reverse所以才强行学STL的,嘻嘻)
此时所有的数字都倒转了,如果尾数有0就在前面,比如3200变成了0023,00在前面
 判断迭代器指向的地方是否为字符0,如果是就向后走,直到没有0,打印输出。 如果不是负数则是正数,
 reverse,
 当迭代器指向的地方为字符0时向后,打印输出。

代码如下:
#include<iostream>   
#include<vector>   
#include<algorithm> //push_back()
#include<cstring>//strlen
using namespace std;
int main(){
	char a[20];
	vector<char> s;//动态数组
	vector<char>::iterator it;//迭代器

	cin>>a;
	int length=strlen(a);
	for(int i=0;i<length;i++)
		s.push_back(a[i]);
//input		
		
	it=s.begin();
	if(*it=='-'){//负数 
		it++;//cout<<*it;移动到数字位 
		reverse(it,s.end());//逆序 
		cout<<"-";
		while(*it=='0') {//如果逆序后第一位是0就往后,直到没有0 
			++it;
		//	cout<<*it;
		}	
		for(;it!=s.end();++it)//输出 
			cout<<*it;
			cout<<endl; 
	}else{//正数 
		reverse(s.begin(),s.end());
		while(*it=='0') ++it;
		for(;it<s.end();++it)
			cout<<*it;
			cout<<endl;
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值