当前位置:   article > 正文

小韦老师@NOIP 普及组-2011-数字反转_[noip2011普及组]数字反转c++

[noip2011普及组]数字反转c++

小韦老师@NOIP 普及组-2011-数字反转

题目:

描述

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

输入

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

输出

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

输入样例1

123
  • 1

输出样例1

321
  • 1

输入样例2

-380
  • 1

输出样例2

-83
  • 1

提示

-1,000,000,000≤ N ≤1,000,000,000。

题解:

思路:
整体思路:

对于一个数来说,反转之后的数字就是从右往左输出,所以可以将数字的每一位从右到左存到数组(下标为从小到大)中,如何将数组按下标从小到大输出即可。
但是这里需要注意两个问题:
1.负数。
若是负数,反转后的数也是负数,所以可以先输出一个负号,然后将该数变为相反数,便于操作。
2.反转之后的数有前导零(前面有零),所以需要跳过前导零输出。

具体步骤:

1.定义一个数组,用来存储输入的整数的每一位:

	const int N = 20;
	int a[N];  // 用来存储整数的每一位 
  • 1
  • 2

2.定义一个变量 x,用来存储输入的整数,并输入 x。
3.若 x 为负数,则输出负号,将 x 变成其相反数:

	if (x < 0) {  // 若 x 是负数 
		cout << "-";  // 输出负号 
		x = -x;  // x 变成相反数 
	}
  • 1
  • 2
  • 3
  • 4

4.将 x 的每一位(从右到左)都存储到数组(下标从小到大)中:

	int idx = 0;  // 数组的下标,初始化为 0 
	while (x != 0) {  // 当 x 不为 0 时 
		a[idx++] = x % 10;  // 把当前的 x 的最右边一位存在数组中 
		x /= 10;  // x 去掉已处理过的最右边一位 
	}
  • 1
  • 2
  • 3
  • 4
  • 5

5.去掉前导零输出:

	// 用来存储第一个数组值不为 0 的数组下标,初始化为 0 
	int i = 0; 
	while (a[i] == 0) {  // 当数组值为 0 
		i++;  // i 加 1 
	}
	for (int j = i; j < idx; j++) {  // 输出合法的反转的数 
		cout << a[j];
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
完整代码:
#include <bits/stdc++.h>

using namespace std;

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

int main() {
	
	int x;  // 用来存储输入的整数 
	cin >> x;
	if (x < 0) {  // 若 x 是负数 
		cout << "-";  // 输出负号 
		x = -x;  // x 变成相反数 
	}
	int idx = 0;  // 数组的下标,初始化为 0 
	while (x != 0) {  // 当 x 不为 0 时 
		a[idx++] = x % 10;  // 把当前的 x 的最右边一位存在数组中 
		x /= 10;  // x 去掉已处理过的最右边一位 
	}
	// 用来存储第一个数组值不为 0 的数组下标,初始化为 0 
	int i = 0; 
	while (a[i] == 0) {  // 当数组值为 0 
		i++;  // i 加 1 
	}
	for (int j = i; j < idx; j++) {  // 输出合法的反转的数 
		cout << a[j];
	} 

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/程序安全守护者/article/detail/60535
推荐阅读
相关标签
  

闽ICP备14008679号