神犇营-41-数字反转

【小韦同学@神犇营-41-数字反转】

题目:

描述

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

输入

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

输出

输出共 1 行,一个整数,表示反转后的新数。

输入样例1

123

输出样例1

321

输入样例2

-380

输出样例2

-83

题解:

/*********************************************************************

* 题目:神犇营-41-数字反转
* 作者:小韦老师
* 邮箱:weichangying_wcy@163.com

* 题解:
	思路:
	当该数为负数时,先输出负号,并且将该数变成其相反数。把该数的每一位
	放到一个数组中,低位放在数组低位(下标小的那一端)。从数组下标小的
	那一端输出,若不是前导0,则输出即可。  
	注意:
	立个标志,记录当前位置前导0是否还存在。 

*********************************************************************/

#include <bits/stdc++.h>

using namespace std;

const int N = 20;
int a[N];  // 用来存数的每一位 

int main() {
	
	int x;
	cin >> x;
	// 若这个数是负数,则输出一个负号,并且将x变成其相反数 
	if (x < 0) {  
		cout << "-";
		x = -x;
	}
	int idx = 0;  // 数组下标 
	// x的低位存在数组的低位(下标从0开始) 
	while (x != 0) {
		a[idx++] = x % 10;
		x /= 10;
	}
	// 标志反过来的数的前导0是否还存在,初始为false 
	bool flag = false;
	// 数组a低位存的是x的低位,现要反转,应先输出数组a的低位 
	for (int i = 0; i < idx; i++) {
		// 当前导0不存在时,标志置为true 
		if (a[i] != 0) flag = true;
		// 当已经不存在前导0了,则输出每一位数 
		if (flag) cout << a[i];
	} 

	return 0;
}

我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:weichangying_wcy@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值